1213:八皇后问题
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 45470 通过数: 17207
【题目描述】
在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。
【输入】
(无)
【输出】
按给定顺序和格式输出所有八皇后问题的解(见样例)。
【输入样例】
(无)
【输出样例】
No. 1
1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0
No. 2
1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0
...以下省略
【参考代码】
#include<bits/stdc++.h>
using namespace std;
int n=8,a[8],b[16],c[16],d[8][8],ans=0;
void f(int i,int j,bool flag)
{
a[j]=flag;
b[i-j+n]=flag;
c[i+j]=flag;
d[i][j]=flag;
}
void dfs(int i){
if(i==n){
ans++;
printf("No. %d\n",ans);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)cout<<d[j][i]<<" ";
cout<<endl;
}
}
for(int j=0;j<n;j++){
if(!a[j]&&!b[i-j+n]&&!c[i+j]){
f(i,j,1);
dfs(i+1);
f(i,j,0);
}
}
}
int main()
{
dfs(0);
return 0;
}
2138

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



