/* 問題描述:輸入一個正整數(shù)N,則程序輸出N皇后問題的全部擺法。 輸出結(jié)果里的每一行都代表一種擺法。行里的第i個數(shù)字 如果是n,就代表第i行的皇后應(yīng)該放在第n列。皇后的行、列編號都是從1 開始計算 */#include <iostream>#include <cmath>using namespace std;int N;int queenPos[100];//用來存放算好的皇后位置,最左上角是(0,0);void NQueen(int k)//求解函數(shù){//在0~k-1行已經(jīng)擺好的情況下,擺第k行及其以后的皇后 int i; if( k==N) {//N個皇后已經(jīng)擺好 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++) {//和已經(jīng)擺好的k個皇后比較,看是否沖突 if(queenPos[j] == i||abs(queenPos[j] - i) == abs(k-j)) {//發(fā)生沖突,測試下一個位置 break; } } if(j == k) {//當(dāng)前位置i和擺好的皇后不沖突 queenPos[k] = i;//將第k行的皇后擺在第i列并記錄下來 NQueen(k+1);//遞歸,繼續(xù)擺放第k+1行 } }}int main(){ cin>>N; NQueen(0);//從第零航開始擺皇后 return 0;}運行結(jié)果:

新聞熱點
疑難解答