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;
}
本文介绍了一个经典问题——八皇后问题的解决方案。该问题要求在8×8的棋盘上放置8个皇后,使得任意两个皇后不在同一行、列或对角线上。文章提供了一段C++代码实现,通过递归回溯的方法找出所有可行的摆放方案。
5944

被折叠的 条评论
为什么被折叠?



