N皇后問題

2021-10-14 04:18:37 字數 1023 閱讀 1388

做題思路

**在一張n∗n的西洋棋棋盤上,放置n個皇后,使得所有皇后都無法互相直接攻擊得到,(皇后可以直接攻擊到她所在的橫行,豎列,斜方向上的棋子),現在輸入乙個整數n,表示在n∗n的棋盤上放n個皇后,請輸出共有多少種使得所有皇后都無法互相直接攻擊得到的方案數。 例如下面這樣的擺法,是4皇后的乙個解 (1代表有皇后,0代表沒有)

0 1 0 0

0 0 0 1

1 0 0 0

0 0 1 0

乙個整數n

能使得在n∗n的西洋棋棋盤上放置n個皇后,並且所有皇后都無法互相直接攻擊得到的方案數

樣例輸入1

4樣例輸入2

8樣例輸出1

2樣例輸出2

921.對於這道題由於一行只有乙個皇后所以可以使用乙個以為陣列儲存皇后的位置,下標是行數,裡面儲存皇后所在列數。

2.直接dfs暴力搜尋,從第一行第一列開始放入皇后,確定之後對於以後每一行放入的皇后應該滿足一下兩個條件。

1).新放入皇后與之前舊皇后的行數與列數之差的絕對值相等。

2).由於每行乙個皇后確定只需比較列數是否重複。

兩者滿足乙個說明這一列不能放入新皇后。

3.遞迴return的條件

1).到了最後一行。

2).某一行沒有列可以放入皇后。

//n皇后問題

#include

#include

#include

using namespace std;

int map[20]

;//存放皇后的位置

int ans=0;

//記錄有多少中情況

int m;

//皇后總數

intdfs

(int n)}if

(temp ==0)

dfs(n +1)

; map[n]=0

;//退出標記}}

if(i > m)

}int

main()

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棋盤裡使不存在兩個皇后在同行同列和同一斜線上...