#include <iostream>
#include <cmath>
using namespace std;
int N;
int queenposition[100];//假定不会超过100个皇后
void queen(int k);//假定1~k-1行已经摆好皇后
int main()
{
cin>>N;
queen(0);//从第一行开始摆放皇后
return 0;
}
void queen(int k){
if(k==N){
for(int i=0;i<N;i++)
cout<<queenposition[i]+1<<" ";
cout<<endl;
return;
}
else {
for(int i=0;i<N;i++){//尝试第k行皇后的位置
int j;
for(j=0;j<k;j++){
if(queenposition[j]==i||abs(queenposition[j]-i)==abs(k-j))
//与已经摆好的k个皇后比较看看是否冲突
//既不能在同一列,又不能斜着在一行
break;
}
if(j==k){//说明没有执行过上面的break,说明不冲突
queenposition[k]=i;
queen(k+1);
}
}
}
}
输入一个整数n,要求n个国际象棋的皇后,在n*n的棋盘上,互相不攻击,输出全部方案。
输出结果里的每一行都代表一种摆法,行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。皇后的行列编号都是从1开始算。
样例输入:
4
样例输出:
2 4 1 3
3 1 4 2