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);

}}

      

}

posted on 2020-02-17 14:26  Desire-Driver  阅读(199)  评论(0)    收藏  举报