📄 class1.cs
字号:
using System;
class Queen
{
const int SIZE = 8;//皇后数
public static void Main()
{
int[] Queen = new int [SIZE];//每行皇后的位置
int y,x,i,j,d,t=0;//注意这几个都是全局变量
y = 0;
Queen[0] = -1;
//差点没有看到这是一个不断循环的程序
while( true )
{
//后面这个fou循环就是为了找出y皇后的位置x
//只需要一个x就可以标记一个皇后的位置,第y皇后就是第y列
for (x=Queen[y]+1; x<SIZE; x++)
{
for (i=0;i<y;i++)
{
j = Queen[i];//第i个皇后的x方向的位置
d = y-i;//
//检查新皇后是否与以前的皇后能相互攻击
if ((j==x)||(j==x-d)||(j==x+d))//这就是判断这两个皇后不在同一列,并且不在同一对角线上
break;
}
if (i>=y)
break;//不攻击
}
if (x == SIZE) //没有合适的位置
{
if (0==y)
{
//回朔到了第一行
Console.WriteLine("Done");
break; //结束
}
//回朔
Queen[y]=-1;//这个应该是标记y位皇后没有排序呢
y--;//皇后标记
}
else
{
Queen[y]=x;//确定皇后的位置
y++;//下一个皇后
if (y<SIZE)//如果大于或者等于SIZE后那么就可以输出一个八皇后的排序了
Queen[y]=-1;
else
{
//所有的皇后都排完了,输出
//t就是记录成功排序的个数
Console.WriteLine("\n" + ++t +':');
for(i=0;i<SIZE;i++)
{
for (j=0;j<SIZE;j++)
if(Queen[i] == j)
Console.Write('Q');
else
Console.Write('.');
Console.WriteLine();
}
y = SIZE-1;//回朔
}
}
}
Console.ReadLine();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -