回溯 n皇后問題

2021-04-29 20:37:21 字數 654 閱讀 4937

思想:

用回溯方法求解,首先要分析問題的求解空間。可用一棵n叉樹表示這個問題的求解空間,在回溯遍歷這個課二叉樹的過程中形成合理的解。

對於這棵n叉樹,列序號i(0~n-1)是它的孩子,而每個孩子都有深度為n的子樹(包括自身),這些子樹的層次是n個皇后(也代表每個皇后的行序號,因為不同的皇后肯定不在同一行)。於是,遍歷這個n叉樹的每個孩子結點到葉子節點便得到乙個合理解。遍歷時,先從第乙個孩子(第一行)開始遍歷,深度遍歷這個孩子子樹,直到找到(1)乙個合理解或者(2)剪去不存在合理解的分枝。對於(1)表明已經遍歷到了葉子節點,亦即所有的皇后都找到了乙個合理的位置,對於(2)表明在某個層次的皇后節點不能找到乙個合理位置,於是停止深度遍歷,將此分枝剪去。不管對於哪種情況,此時要向上層回溯,繼續探索合理的解。直到整個n叉樹都遍歷完。

比如對於4個皇后的情況,首先讓第乙個皇后佔據x[0][0](第一行第一列),然後讓第二個皇后在第二行尋找合適的位置x[1][2](第二行,第3列),第三個皇后在第三行尋找合適的位置,此時第三個皇后已經不能找到合適位置,於是將此分枝剪去。回溯到第二個皇后(第二行),探索新的位置,此時對於第二個皇后已經不能找到合理位置。回溯到第乙個皇后(第一行),探索新的位置。此時,讓第乙個皇后佔據第一行第二列x[0][1],依次回溯,直到第乙個皇后的所有列都試探完畢,也就遍歷完了n叉樹。

下面給出遞迴和非遞迴的實現:

n皇后問題(回溯)

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...

回溯 N皇后問題

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...

回溯經典 n皇后問題

題目大意 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 ...