【闲话】
一开始完全没理解到 想着不就是每列都有一个吗为什么还要输出列 没理解到题目吧 后来老师发了个小程序自己演示才懂 很厉害qwq
每行都循环 每行中找一列并标记 当下一行没有可选择的时候就取消上一行的标记
1.行row 列column 简写col
【题意】
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。
【输入格式】
一个整数n( 1 < = n < = 10 )
【输出格式】
每行输出对应一种方案,按字典序输出所有方案。每种方案顺序输出皇后所在的列号,相邻两数之间用空格隔开。
【样例输入】
4
【样例输出】
2 4 1 3
3 1 4 2
【代码】
#include<cstdio>
using namespace std;
const int N=20;
int n,f1[N],f2[N*2],f3[N*2],col[N];
void search(int k){
if(k==n+1){
for(int i=1;i<=n;i++)
i<n?printf("%d ",col[i]):printf("%d\n",col[i]);
return;
}
for(int i=1;i<=n;i++){
if(!f1[i]&&!f2[k+i]&&!f3[k-i+n]){
col[k]=i;
f1[i]=f2[k+i]=f3[k-i+n]=1;
search(k+1);
f1[i]=f2[k+i]=f3[k-i+n]=0;
}
}
}
int main(){
scanf("%d",&n);
search(1);
return 0;
}