n皇后問題

2021-08-03 13:32:09 字數 818 閱讀 8014

問題描述:現有乙個n*n格的棋盤,並且有n個皇后。要求將n個皇后放入棋盤,任意兩個皇后不能處於同一行、同一列和同一斜線。輸出所有解法

分析思路:分析該問題,可以使用遞迴回溯問題法解決,並且n皇后問題為回溯問題中的排列樹。在遞迴的過程中,對不滿足條件的分支進行減支來提高執行效率。首先,我們在遞迴時迴圈n次,因為有n個皇后,並且任意兩個皇后不能處於同一行,所以肯定每一行都有乙個皇后,所以皇后的行號在遞迴時即可確定;要滿足任意兩個皇后不能處於同一列,只需要定義乙個長度為n的陣列,陣列中儲存1~n的下標,每次迴圈時只需要做下標的全排列即可保證每個皇后不在同一列;要保證任意兩個皇后不在同一斜線,只需要在遞迴時判斷該行的皇后在排列後前面已經確定位置的皇后是否有處於同一斜線的即可(處於同一斜線的判斷方法|行號i-行號j|==|列號i-列號j|)。

每乙個皇后的位置按(x,y)格式輸出,x表示行號,y表示列號。

#include #include using namespace std;

int n; //皇后個數

int *x; //儲存列的值

int count=0; //解法個數

//交換兩個數

void swap(int &a, int &b)

//任意兩個皇后不能在斜對面

bool check(int i) }}

int main()

queue(1);

return 0;

}

執行結果:

N皇后問題

include define maxqueens 20 define minqueens 4 enum bool typedef struct queendata queendata queendata queens maxqueens 1 int ncount init int init chec...

N皇后問題

採用遞迴回溯法 執行結果 輸入8 對於n皇后解的個數,參考 當n 16時,構造法給出解,參考poj 3239 一 當n mod 6 2 且 n mod 6 3時,有乙個解為 2,4,6,8,n,1,3,5,7,n 1 n為偶數 2,4,6,8,n 1,1,3,5,7,n n為奇數 上面序列第i個數為...

N皇后問題

問題 題目 於西洋棋的玩法,因為皇后所在的位置可以縱向 橫向 兩個斜向四個方向的 捕捉 所以8皇后問題就是要求如何布置8個皇后在8 8的棋盤上而使他們互相無法 捕捉 也就是說不存在兩個皇后同行或同列,或在同一斜線上。而n皇后問題就是如何布置n個皇后在n n棋盤裡使不存在兩個皇后在同行同列和同一斜線上...