C++ 八皇后问题

zxz87 2007-11-29 08:44:47


#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);
}

麻烦哪位能把以上八皇后的代码解释一下或添加一下注释,谢谢
...全文
451 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
thecorr 2007-11-30
  • 打赏
  • 举报
回复
顶一下
wany031123 2007-11-30
  • 打赏
  • 举报
回复
pptor 2007-11-30
  • 打赏
  • 举报
回复
#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时 表示已经得到一组解 ,然后输出

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧