在n×n棋盤上放彼此不受攻擊的n個皇后。
按西洋棋規則,皇后可攻擊同行、同列、同一斜線的棋子。
等價於在n×n格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上。
可以用乙個陣列儲存每行中的皇后的縱座標,例如n=8時,x=(4,6,8,2,7,1,3,5)表示第一行的皇后的橫座標為4,
第二行的皇后的橫座標為6,......
比較常用的一種求解辦法為通過子集樹求解,約束條件為abs(k-j)!=abs(x[j]-x[k]) 並且 x[j]!=x[k]。
其實這個問題也可以描述為n個數字的排列問題,約束條件為abs(k-j)!=abs(x[j]-x[k]),這樣該問題就可以用全排列的演算法求解。
子集樹求解的程式為:
#include #include int x[20];
int n,count;
int place(int k)
else
for(i=1;i<=n;i++) }
int main()
排列樹求解的程式為:
#include #include int n,count;
int place(int data, int k)
else }
}int main()
子集樹與排列樹
1.當所給問題是從n個元素的集合s中找出s滿足某種性質的子集時,相應的解空間稱為子集樹。例如 n個物品的0 1揹包問題所相應的解空間是一棵子集樹,這類子集樹通常有2 n個葉結點,其結點總數為 2 n 1 1。遍歷子集樹的演算法通常需要 2 n 計算時間。回溯法搜尋子集樹的演算法一般可以描述如下 vo...
子集樹與排列樹
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!在前面的利用回溯法求解01揹包問題的時候,我們提到了這個問題的解空間樹是子集樹,那麼什麼是子集樹呢?與子集樹對應的還有乙個排列樹!它們又有什麼區別呢?為了說明這兩個概念的區別,我們首先假定有乙個集合s 解空間為排列樹的典型問題就是旅行售貨員問題。簡...
子集樹與排列樹
1.當所給問題是從n個元素的集合s中找出s滿足某種性質的子集時,相應的解空間稱為子集樹。例如 n個物品的0 1揹包問題所相應的解空間是一棵子集樹,這類子集樹通常有2 n個葉結點,其結點總數為 2 n 1 1。遍歷子集樹的演算法通常需要 2 n 計算時間。回溯法搜尋子集樹的演算法一般可以描述如下 vo...