遞迴思想完成n皇后問題

2021-07-30 01:27:23 字數 575 閱讀 8992

已經很長時間不敲**了,感覺自己越來與頹廢,所以現在又想做回一名苦逼的程式設計師,開啟自己的**之路。

所謂4皇后問題就是求解如何在4×4的棋盤上無衝突的擺放4個皇后棋子。在西洋棋中,

皇后的移動方式為橫豎交叉的,因此在任意乙個皇后所在位置的水平、豎直、以及45度斜線上都不能出現皇后的棋子

,例子要求程式設計求出符合要求的情況的個數

n皇后問題就是將4轉化為變數n。

用遞迴的方法首先要找到遞迴出口,這裡我設用k迴圈所有行n,當k=n時,迴圈結束。這裡的k表示前0~k-1行已經放置好了,沒毛病。

出口判斷好了之後就是找判斷條件,就是上文中紅色字型。

具體**如下:

#include #include using namespace std;

int n;

int queenpos[100];

void nqueen(int k);

int main()

void nqueen(int k){

int i;

if(k==n){

for(i=0;i

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 個元素,每個元素代表皇后 每行擺放...