N皇后問題的遞迴求解

2021-09-17 21:24:11 字數 1201 閱讀 9932

n皇后問題 (20 分)

在n * n的方格棋盤上,放置n個皇后,要求每個皇后不同行,不同列,不同左右對角線。 其中n不超過10。 要求:輸出所有的解。

輸入格式:

輸入n輸出格式:

逐行輸出每一種解,用每個皇后的位置座標表示,每個位置座標之後均有乙個空格符,輸出最後一行為空行。

輸入樣例:

在這裡給出一組輸入。例如:

6輸出樣例:

在這裡給出相應的輸出。例如:

1: (1,2) (2,4) (3,6) (4,1) (5,3) (6,5)

2: (1,3) (2,6) (3,2) (4,5) (5,1) (6,4)

3: (1,4) (2,1) (3,5) (4,2) (5,6) (6,3)

4: (1,5) (2,3) (3,1) (4,6) (5,4) (6,2)

答案**:

```

#include#include#include#includeusing namespace std;

int chess[10][10] = ;

int count = 0;

//判斷是否能放入皇后,不能則返回0,能則為1

第一次的棋盤。

遞迴求解的n皇后問題其實是一種比較暴力的方法,那就是每乙個點都試過去,如果這個點可以放,那麼就賦值為1。這麼做其實是比較耗空間和時間的,但是簡單。(能對就行了)

這裡借鑑了一位老哥的canput函式,本來是想學小甲魚那種全部都掃過去看可不可以的方法,後來去搜的時候發現了這種比較好用的方法,這種方法的判斷是否可以放是用類似於深搜的方法?其實皇后問題只要判斷在要落子的皇后前面的十字棋盤中有沒有皇后就可以了

最後,每個遞迴的出口就是當第乙個落子的皇后放到最後一行的時候,遞迴就結束了。

求解n皇后問題

n皇后問題 回溯法 遞迴的邏輯中一般有兩個重要的概念 1.遞迴邊界 2.遞迴式 1.問題描述 在n n格的西洋棋上擺放n個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。遞迴思想 int count 0 void generatep int index i...

n皇后問題求解

在乙個n n的棋盤上放置n個王后,使得每個王后不會相互攻擊,即任意兩個王后不在同一行 同一列 同一對角線上,輸出所有的放置方式。輸入n,表示棋盤大小。深度優先搜尋 dfs 列舉第i個王后的放法,再列舉第i 1個王后的放置方法,直至放置完所有棋子,檢查放置方式是否合法,若合法則輸出 不合法則返回,嘗試...

深度優先 遞迴方法 求解n皇后問題

這裡我用乙個類來模擬整個問題求解過程。問題的核心部分 怎樣儲存n個皇后,另乙個是如何判別當前位置的皇后能否插入到棋盤中 針對這兩個問題,可以採取用遞迴的方法解決。首先可以用乙個維位陣列 來儲存每一行皇后放置的 列數 另外就是要了解到使用乙個判別式,來判別當前要插入的位置是否處在 已經插入的皇后的對角...