遞迴的基本概念
乙個函式呼叫其自身,就是遞迴
遞迴的作用
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 個元素,每個元素代表皇后 每行擺放...