N皇后 C語言

2021-10-14 05:28:32 字數 1074 閱讀 4599

文章目錄

簡單的搜尋——n皇后問題

題目輸入

輸出樣例輸入

樣例輸出

做題思路

**簡單的搜尋——n皇后問題

題目在一張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做題

用陣列int x[n]表示棋盤狀態,例如x[0]=1表示第0行皇后放在第1列。

皇后k在第k行第x[k]列:(k,x[k])

測試方法:測試皇后k在第k行第x[k]列時,是否與前面已放置好的皇后j相攻擊。

x[j]== x[k] 時,兩皇后在同一列上;

abs(hang-j)==abs(x[hang]-x[j])時,兩皇后在同一斜線上。

兩種情況兩皇后都可相互攻擊`

深度優先搜尋遞迴方式

#include

int cnt=0;

//可行解個數

int n;

//皇后個數

int x[

100]

;//皇后放置的列數

/* 放置皇后到位置(hang,***),若成功返回1,失敗返回0 */

intplace

(int hang)

return1;

//滿足條件返回1

}int

queen

(int hang)

else}}

intmain()

N皇后C語言解法

include int cnt 0 解法個數 int n 棋盤邊長 檢查當前位置是否與之前的皇后衝突 列相同,斜率為1或 1 queen陣列下標表示行,值表示列 int check int queen,int row,int column return 1 輸出每個解法,i表示行,a i 表示列 v...

C語言 n皇后問題詳解

題目描述 八皇后問題 個皇后兩兩不在一行,不在一列,不在同一對角線上 1.方法1 暴力法 n皇后問題 個皇后兩兩不在一行,不在一列,不在同一對角線上 兩種方法 暴力法 回溯法 include include include include define n 8 bool hash n 1 int p...

n皇后問題c語言 九章演算法 N皇后問題

n皇后問題是將n個皇后放置在n n的棋盤上,皇后彼此之間不能相互攻擊 任意兩個皇后不能位於同一行,同一列,同一斜線 給定乙個整數n,返回所有不同的n皇后問題的解決方案。每個解決方案包含乙個明確的n皇后放置布局,其中 q 和 分別表示乙個女王和乙個空位置。樣例1 輸入 1 輸出 q 樣例2 輸入 4 ...