C 中八皇后問題的遞迴解法 N皇后

2022-01-18 12:06:32 字數 1363 閱讀 9430

八皇后問題的介紹在此。以下是用遞迴思想實現八皇后-n皇后。

**如下:

using

system;

using

system.collections.generic;

namespace

queenssolution

putqueen(n, queen, 0);

console.writeline(count);

console.readkey();

}private

static

void putqueen(int n, list queen, int

row)

else

console.writeline();

}row--;}}

}private

static

bool checkqueens(list queen, int

row)

}return

true

; }

}}

解釋:1.要想解出在n*n的棋盤上到底有多少種放置皇后的方法,主要用到兩個方法,放皇后的putqueen方法,檢查皇后的checkqueens方法。

2.在main函式裡對動態陣列進行初始化,這個動態陣列用來記錄n皇后中每一行所放置的皇后的位置(1就代表放置在該行第一列,n就代表放置在該行的第n列)。

3.row代表的是八皇后棋盤的每一行。

4.在main函式中對動態陣列進行了一下初始化,這一步是必須的,否則執行結果報錯。

5.變數count(解的個數)宣告在main函式外,是靜態的。

6.putqueen方法採用遞迴思想——放皇后(該行中每一列都要放置),檢查放皇后的位置是否合理,如果合理則到下一行,判斷下一行是否存在,如果存在——放皇后(該行中每一列都要放置),檢查放皇后的位置是否合理,如果合理則……直到不存在下一行為止每一行都已經放置好了皇后,這時我們將解的個數記錄一下(count++),然後列印該種解法。

7.在遞迴結束後,一定要記得返回到上一行(row--),這樣才能讓「for (queen[row] = 1; queen[row] <= n; queen[row]++)」生效,實現每一行中的每一列都放置過皇后。一定要注意row--的位置要放在整個if-else語句塊的後面!因為整個if-else語句塊形成了對遞迴過程中狀態的判斷,有兩種狀態,第一種狀態是皇后當前在第2到n-1行,這時候如果想返回上一行,「row--」的位置其實可以寫在if語句塊中"putqueen(n, queen, row);"這一句的後面;第二種狀態是皇后當前在最後一行(也就是第n行),這時候如果想返回上一行,「row--」的位置其實可以寫在else語句塊中。因此,我們才將「row--」的位置移到了整個if-else語句塊的後面。

八皇后 N皇后問題 遞迴實現

八皇后問題,即在乙個棋盤上,每行都可以放置乙個皇后,但每個皇后都不能影響其他皇后的安全,即所有皇后的位置不能在同一直線上 解決問題方法及思想 遞迴 在使用遞迴之前首先要準備好兩個函式實現 1.判斷此時此刻位置是否安全 只需要判斷元素上方,左上方,右上方是否安全,且只要有乙個位置不安全,則結束判斷 2...

八皇后問題 遞迴求解法

include include include 八皇后問題遞迴方法實現 using namespace std ofstream file 用以計數計算結果的數目 int count 1 列印的棋盤其中列印1的位置是皇后的位置,0空位。這裡因為在控制台看不到全部,所有做了在檔案中輸出所有的解 int...

N皇后的遞迴解法C 實現

class program 將目標棋盤格清空 起始行 棋盤邊界 static void clear int arr,int r,int n 遞迴放置棋子 目標棋盤 目標行 n n的棋盤 static void place int arr,int r,int n 用來檢查可否放置棋子 目標棋盤 目標行...