1213:八皇后问题
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。
【输入】
(无)
【输出】
按给定顺序和格式输出所有八皇后问题的解(见样例)。
【输入样例】
(无)
【输出样例】
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,vis1[8],vis2[16],vis3[16],a[8][8],ans=0;
void vis(int i,int j,bool flag)
{
a[i][j]=flag;
vis1[j]=flag;
vis2[i-j+n]=flag;
vis3[i+j]=flag;
}
void dfs(int i)
{
if(i==n)
{
printf("No. %d\n",++ans);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<a[j][i]<<" ";
cout<<endl;
}
}
for(int j=0;j<n;j++)
if(!vis1[j]&&!vis2[i-j+n]&&!vis3[i+j])
{
vis(i,j,1);
dfs(i+1);
vis(i,j,0);
}
}
int main()
{
dfs(0);
return 0;
}