Write an algorithm to print all ways of arranging eight queens on a chess board so that none of them share the same row, column or diagonal.
经典的八皇后问题:
在一个8*8的棋盘上放8个皇后,使得这8个皇后无法互相攻击( 任意2个皇后不能处于同一行,同一列或是对角线上),输出所有可能的摆放情况。
代码如下:
定义 queen[row] = col 表示 第 row 行对应的皇后 放在第 col 列。
/* linolzhang 2009.09
eight queen
*/
#include <iostream>
#define Gird_Size 8
using namespace std;
int queen[Gird_Size]; // define queen in row [i] -> col number
void print_result()
{
for(int row=0; row<Gird_Size; row++)
{
for(int col=0; col<Gird_Size; col++)
{
if(queen[row] == col)
cout<<"1 ";
else
cout<<"0 ";
}
cout<<endl;
}
cout<<endl;
}
void eight_queen(int row)
{
if(row == Gird_Size)
{
print_result(); // result++
return;
}
for(int i=0; i<Gird_Size; i++)
{
queen[row] = i;
bool bReady = true;
for(int j=0; j<row; j++)
if(queen[row]==queen[j] || row-j==queen[row]-queen[j] || row-j==queen[j]-queen[row])
{
bReady = false;
break;
}
if(bReady)
eight_queen(row+1);
}
}
int main()
{
eight_queen(0);
return 0;
}