📄 八皇后.cpp
字号:
#include<iostream>
#include<cmath>
using namespace std;
void queen(int row/*行*/, int col/*列*/)
{
static int queen_col[8],count=0,i;
for(i= 0;i<row;i++)
if(col==queen_col[i]/*2皇后再同一列上*/||row-i==abs(queen_col[i]-col)/*2皇后在同一对角线上*/) return;
queen_col[row]=col;//记录皇后的位置
if(row<7)
for(int i=0;i<8;i++) queen(row+1,i);//填写下一行皇后可能的位置
else //输出八皇后问题可行方案
{
cout <<'('<<++count<<')'<<endl;
for(i=0;i <8;i++)
{
for(int j=0;j<8;j++) cout<<(j==queen_col[i]);
cout<<endl;
}
cin.get();
}
}
void main()
{
cout<<"按回车键查看下一种摆放方法:"<<endl;
for (int i=0;i <8;i++) queen(0,i);//填写皇后第一皇可能出现的位置
}
//总体思路是先填第一行皇后可能的位置 for (int i=0;i<8;i++) queen(0,i);
//然后检查这个皇后位置是否可行 通过这句代码检测
//for (i = 0;i<row;i++)
//if (col==queen_col[i]/*2皇后再同列上*/ | | row - i ==abs(queen_col[i]-col)/*2皇后在对角线上*/) return;
//如不可行就把它裁剪掉 在检查另一个皇后位置
//如可行 就把这个位置记录到数组 queen_col[8]中去,
//queen_col[8] 用来记录皇后所在的位置,queen_col[0]表示皇后在第一行的queen_col[0]列 queen_col[1]表示皇后在第一行的queen_col[1]列 等
//然后检测下一行皇后可能出现的位置 if (row <7) for (int i=0;i <8;i++) queen(row+1,i);
//row ==7时 表示已经得到一组解 ,然后输出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -