C++ 八皇后问题
#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] || row - i == abs(queen_col[i]-col)) 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()
{
for (int i=0;i<8;i++) queen(0,i);
}
麻烦哪位能把以上八皇后的代码解释一下或添加一下注释,谢谢
[解决办法]
#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()
{
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时 表示已经得到一组解 ,然后输出