文章目錄
簡單的搜尋——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 ...