八皇后问题的C#解答

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 )

{

for (x=Queen[y]+1; x<SIZE; x++)

{

for (i=0;i<y;i++)

{

j = Queen[i];

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–;

}

else

{

Queen[y]=x;//确定皇后的位置

y++;//下一个皇后

if (y<SIZE)

Queen[y]=-1;

else

{

//所有的皇后都排完了,输出

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;//回朔

}

}

}

}

}

八皇后有解92个。

另:我认为foreach和for循环在意义上是不同的,在这里应该用for.

望指正,此致。

重粒子@Y2K0928

    原文作者:八皇后问题
    原文地址: https://blog.csdn.net/QQMagicer/article/details/647612
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞