八皇后問題 之全排列解法

2021-09-01 07:28:00 字數 463 閱讀 2891

問題的分解一共有兩步:

1. 生成問題的所有候選解空間

2. 過濾掉那些不滿足要求的

細化這兩步,需要認識到下面兩點:

1. 八皇后所有候選解空間是:  [1,2,3,4,5,6,7,8] 這個集合中元素的全排列
(這個全排列不僅列出了候選解,並且還自動規避掉了皇后在橫、豎方向上攻擊的問題)

2. 接下來八皇后相互攻擊的問題就是:任意兩個皇后是否在一條對角線上,即兩個皇后所在直線的斜率絕對值是否為1 。
清楚了上述兩點後,**就變得異常清晰、簡單、直接了,要做的工作就是:

1. 生成 [1,2,3,4,5,6,7,8] 的全排列

2. 寫出safe函式(判斷斜率)

3. 根據safe函式過濾掉那些有衝突的解。

code:

全排列問題和八皇后問題

全排列問題的解法如下 include const int maxn 11 int n,p maxn hashtable maxn void generatep int index printf n return for int x 1 x n x int main 解析如下 取自 演算法筆記 運用這...

全排列問題和八皇后問題

全排列問題的解法如下 include const int maxn 11 int n,p maxn hashtable maxn void generatep int index printf n return for int x 1 x n x int main 解析如下 取自 演算法筆記 運用這...

python全排列解決八皇后問題

八皇后問題是指8x8的西洋棋棋盤上,如何放置8個皇后,使得任意兩個皇后不會互相攻擊。算上對稱解的話,八皇后問題有91個解 當然,我們習慣從0開始計數 不難想到,用 0,1,2,3,4,5,6,7 八個數字組成個tuple,其中數字所在位置代表了行,數字本身代表了列,則任意乙個排列即代表一種放置方法,...