# include <stdio.h>
# include <stdlib.h>
int count=0;
void EightQueen(int ,int (*)[8] );
bool danger(int ,int , int (*)[8] );
int main()
{
int chess[8][8]={0};
EightQueen(0, chess);
return 0;
}
void EightQueen(int row, int (*chess)[8]) //这是二维数组的传递方法,有其它方法的请给我留言,谢谢!
{
for (int i=0;i<8;++i)
{
if (!danger(row,i,chess))
{
chess[row][i]=1; //不危险就置1,即放入皇后
if (row<7)
{
EightQueen(row+1,chess); //解决下一行的问题,递归在这
}
else
{
printf(" 第 %d 种解法\n",++count); //当所有行都解决了打印
for (int j=0;j<8;++j)
{
for (int k=0;k<8;++k)
{
printf("%d ",chess[j][k]);
}
printf("\n");
}
printf("\n");
//system("pause");
}
chess[row][i]=0; //既然已经打印了某一种结果,就把上面已经放入的皇后拿走,准备下一格的遍历
} //因为上面有递归,所以在能放入皇后的情况下是不会执行这句的&#
数据结构之八皇后问题
最新推荐文章于 2022-10-19 11:50:48 发布
本文通过C语言实现八皇后问题,利用递归方法在8x8棋盘上放置8个皇后,确保无两个皇后在同一行、同一列或对角线上。通过danger函数检查当前位置是否安全,然后在所有可能的位置放置皇后并递归处理下一行,找到所有可能的解决方案。
摘要由CSDN通过智能技术生成