菜雞解N皇后問題

2021-10-14 07:41:59 字數 1099 閱讀 9606

菜雞能有什麼好想法?暴力就完了。

在一張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

92

暴力思路:

觀察規律感覺類似於全排列的變式,將全排列中數字出現的順序看作x座標,數字大小為y座標,所有皇后的排列情況即可表示出來。

限制條件:皇后攻擊範圍為公尺字,從座標中體現為x值、y值不能相同。在過皇后座標斜率為正負一的直線上不能有棋子。x、y方向由於看作數字全排列問題則不可能相等故無需考慮。對於斜線上情況能夠相互攻擊的條件為x+y=n或x-y=m,兩棋子m或n相同。故兩棋子取到的m、n值不能相同。

**:

#include

int n, num =0;

char map[50]

[50];

//象棋棋盤

bool b[50]

, c[50]

, d[50]

;//斜率為1的限制值 斜率為-1的限制值 行限制值

void

dfs(

int m)

for(

int i =

0; i < n; i++)}

}int

main()

}dfs(0

);printf

("%d"

, num)

;return0;

}

菜雞的dfs學習 n 皇后問題

n 皇后問題是指將 n 個皇后放在 n n 的西洋棋棋盤上,使得皇后不能相互攻擊到,即任意兩個皇后都不能處於同一行 同一列或同一斜線上。現在給定整數n,請你輸出所有的滿足條件的棋子擺法。共一行,包含整數n n 10 每個解決方案佔n行,每行輸出乙個長度為n的字元 串,用來表示完整的棋盤狀態。其中 表...

菜雞的dfs學習 n 皇后問題

n 皇后問題是指將 n 個皇后放在 n n 的西洋棋棋盤上,使得皇后不能相互攻擊到,即任意兩個皇后都不能處於同一行 同一列或同一斜線上。現在給定整數n,請你輸出所有的滿足條件的棋子擺法。共一行,包含整數n n 10 每個解決方案佔n行,每行輸出乙個長度為n的字元 串,用來表示完整的棋盤狀態。其中 表...

N皇后問題公式解

分類 一 當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個數為ai,表示在第i行ai列放乙個皇后 省略的序列中,相鄰兩數以2遞增。下同 二 當n mod 6 2 ...