遞迴 n皇后問題

2021-10-01 17:43:54 字數 889 閱讀 6300

在 n x n 的棋盤上面所有的皇后不能相互攻擊,即所有的皇后 既不在同一行、不在同一列,也不在同一對角線,如下圖所示(以 4 x 4 的棋盤舉例):

但是要求求出 n x n 的棋盤上所有排法

n(皇后個數,代表 n x n 的棋盤)

第一行:皇后的第一種排法(共 n 個元素,每個元素代表皇后 每行擺放的列數)

…第 k 行:皇后的第 k 種排法

4
2413

3142

#include

#include

#define _for(a,b,c) for(int a=b;ausing

namespace std;

int line[

100]

;//皇后所在列數

int n;

//皇后個數

void

output

(int n)

//輸出 n 皇后的一種排法

intplace

(int m,

int i)

//判斷第 m 行皇后能否放在第 i 列

void

nqueen

(int m)

//求第 m 行皇后放置的位置(前提是前 m-1 行皇后已經擺放完畢)

}//return

}int

main()

n皇后問題 遞迴

遞迴回溯深度優先搜尋解決n皇后問題 用三個陣列b,c,d分別記錄棋盤上的n個列,2n 1個主對角線和2n 1個負對角線的占用情況。用i,j表示皇后所在的行列,同一主對角線上的行列下標的差一樣,若用表示式i j編號,則是 n 1 n 1,所以用表示式i j n對主對角線編號,範圍是1 2n 1 同樣的...

N皇后問題 遞迴

問題 n行n列的棋盤,放n個皇后,問對於給定的n,求出有多少種合法的放置方法。重點 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。否則會發生互相攻擊。思路 1。首先生成map maxn maxn 並對其進行初始化,可以放棋的地方初始化為0 2。每放乙個皇后,這個皇后...

遞迴 N皇后問題

在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。輸入乙個正整數n,則程式輸出n皇后問題的全部擺法。輸出結果裡的每一行都代表一種擺法。行裡的第i個數字如果是n則代...