n皇后問題

2021-08-04 15:37:17 字數 1178 閱讀 5976

這是一道深搜題目!問題的關鍵是在剪枝。

下面我們對問題進行分析:

1.一行只能放乙個皇后,所以我們一旦確定此處可以放皇后,那麼該行就只能放乙個皇后,下面的就不要再搜了。

2.每一列只能放乙個皇后,所以我們下次搜尋就不要再搜已經放過的皇后了。

3.斜的45°線也只能放乙個。

綜上如何才能最快速的確定一列和45°是否用過這個是個關鍵步驟,一旦此步驟確定我們就可以很快的進行搜尋了。

我們用三個陣列來儲存他的每乙個狀態及(三個方向 ↖ ↑ ↗)

但是如果我們儲存↑(每一列方向上的皇后)是非常容易儲存的 但是儲存( 這兩個方向上的狀態就不容易了↖ ↗)

再分析,在這個(↖)方向上的資料的行和列有什麼特點

0  1  2  3   4

-1  0  1  2  3

-2 -1  0  1  2

-3 -2 -1  0  1

-4 -3 -2 -1  0 

將此表列出我們就應該知道在(↖)方向上的資料的行和列的特點了,及   在 (↖)方向上  列 - 行 的差是相等的。

假如我們用陣列儲存負數肯定是不行的, 所以我們要加上 n,讓他變為非負.

再分析,在這個( ↗)方向上的資料的行和列有什麼特點

0 1 2 3 4

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7

將此表列出我們就應該知道在(↗)方向上的資料的行和列的特點了,及   在 (↗)方向上  列 + 行 的和是相等的。

知道資料怎麼處理就可以解決問題了。

下面附上參考**:

#include#include#includeusing namespace std;

int vis[3][50], p[15];//三個方向 ↖↑↗在此三個方向都不能有皇后

int n, sum;

void dfs(int row);

int main()

while(scanf("%d",&n), n)

return 0; }

void dfs(int row)

for(i = 1; i <= n; i++)}}

N皇后問題

include define maxqueens 20 define minqueens 4 enum bool typedef struct queendata queendata queendata queens maxqueens 1 int ncount init int init chec...

N皇后問題

採用遞迴回溯法 執行結果 輸入8 對於n皇后解的個數,參考 當n 16時,構造法給出解,參考poj 3239 一 當n mod 6 2 且 n mod 6 3時,有乙個解為 2,4,6,8,n,1,3,5,7,n 1 n為偶數 2,4,6,8,n 1,1,3,5,7,n n為奇數 上面序列第i個數為...

N皇后問題

問題 題目 於西洋棋的玩法,因為皇后所在的位置可以縱向 橫向 兩個斜向四個方向的 捕捉 所以8皇后問題就是要求如何布置8個皇后在8 8的棋盤上而使他們互相無法 捕捉 也就是說不存在兩個皇后同行或同列,或在同一斜線上。而n皇后問題就是如何布置n個皇后在n n棋盤裡使不存在兩個皇后在同行同列和同一斜線上...