#include<bits/stdc++.h>
using namespace std;
int n;
const int maxn=100;//n皇后的规模
int NQueenpos[maxn];
void NQueen(int k) { //0到k-1行都已经摆好,现在是求k行的情况
int i;
if(n==k) { //0到k-1一共k行,若k==n则已经结束,输出摆放情况
for(i=0; i<n; i++) {
cout<<NQueenpos[i]+1<<" ";
}
cout<<endl;
return;
}
for(i=0; i<n; i++) { //没有到n行,已经摆了k行拜放第k+1个数 ,i为摆放的列数
int j;
for(j=0; j<k; j++) { //判断与0到k-1行之间的冲突
if(i==NQueenpos[j] || abs(k-j)==abs(i-NQueenpos[j])) { //已经不同行,判断不同列和对角线,行差==列差
break;//冲突则进入下一个循环,i++
}
}
if(j==k) { //j==k则没有执行过break,没有冲突将
NQueenpos[k]==i;//将k行皇后放在i列
NQueen(k+1);
}
}
}
int main() {
cin>>n;
NQueen(0);
return 0;
}
n皇后思想
最新推荐文章于 2021-03-27 12:33:11 发布