N皇后
输入一个正整数N,则程序输出N皇后问题的全部摆法。输出结构里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。
皇后的行,列编号都是从1开始算
#include<iostream>
#include<cmath>
using namespace std;
int N;
int queenPos[100];
void NQueen(int k);
int main(){
cin>>N;
NQueen(0);
return 0;
}
void NQueen(int k)//在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
{int i;
if(k==N){//N个皇后已经摆好
for(i=0;i<N;i++)
cout<<queenPos[i]+1<<" ";
cout<<endl;
return;
}
for(i=0;i<N;i++){//逐尝试第k个皇后的位置
int j;
for(j=0;j<k;j++){
if(queenPos[j]==i/*与上面某个在同一列上*/||abs(queenPos[j]-i)==abs(k-j)/*在同一斜线上*/){break;}
}if(j==k){
queenPos[k]=i;
NQueen(k+1);
}}
}
浙公网安备 33010602011771号