遞迴與N皇后問題

2021-09-13 12:41:12 字數 826 閱讀 1608

遞迴的基本概念

乙個函式呼叫其自身,就是遞迴

遞迴的作用

1) 替代多重迴圈

2) 解決本來就是用遞迴形式定義的問題

3) 將問題分解為規模更小的子問題進行求解

一行只能有乙個皇后,這個根據遊戲規則中的皇后的勢力就可以得知。

首先先讓a皇后放在左上角(0,0),b皇后再從第二行找到合適的位置,以此類推c皇后在第三行找到合適的位置,一直到n皇后,一組解就出來了,但是問題並不是這麼簡單。

假設現在是4皇后問題,第a個皇后在(0,0)b皇后在(1,3)

c皇后在(3,1)此時d皇后就無位置可以放置。

細心的你,可能會有疑問,每次d皇后,找不到合適的位置,就去讓bc重新尋找位置,當bc皇后在它所處的行,再也找不到合適的位置,a皇后的位置就需要變動了。棋盤上就乙個皇后a,尋找他的合適位置只需右移乙個位置即可。a皇后位移後,再去為bc皇后找合適位置,如果有合適位置,就再去為d皇后尋找合適的位置;如果bc皇后都沒有合適的位置,就需要再次右移a皇后,迴圈上面的過程。

#includeusing namespace std;

int n;

int queenpos[100];

/*用來存放算好的皇后位置。最左上角是(0,0)

每一行都有乙個只用記錄它的列座標*/

void nqueen(int k);

int main()

void nqueen(int k)

for(i=0;iif( j == k )

}

}

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 x n 的棋盤上面所有的皇后不能相互攻擊,即所有的皇后 既不在同一行 不在同一列,也不在同一對角線,如下圖所示 以 4 x 4 的棋盤舉例 但是要求求出 n x n 的棋盤上所有排法 n 皇后個數,代表 n x n 的棋盤 第一行 皇后的第一種排法 共 n 個元素,每個元素代表皇后 每行擺放...