1213:八皇后问题
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 26315 通过数: 9614
【题目描述】
在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。
【输入】
(无)
【输出】
按给定顺序和格式输出所有八皇后问题的解(见样例)。
【输入样例】
(无)
【输出样例】
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>//Writed by Wangzhimin Date:2022.4.29
using namespace std;
int a[100],num=8,t=1;//a中存放找到的合适的列数,num为皇后。
void queen(int n)
{
int i;
if(n==num)//如果是8就输出
{
printf("No. %d\n",t++);
for(i=0;i<num;++i){
for(int j=0;j<num;j++){
if(i==a[j])//行与a中的列同时,输出1,能放的位置。
printf("1 ");
else
printf("0 ");
}
printf("\n");}
return ;
}
for(i=0;i<num;++i){//列
int j;
for(j=0;j<n;++j){//行
if(a[j]==i||abs(a[j]-i)==abs(n-j))//不能放的位置
break;
}
if(j==n){
a[n]=i;
queen(n+1);
}
}
}
int main()
{
queen(0);
return 0;
}