回溯 皇后 演算法筆記 你知道「八皇后問題」嗎?

2021-10-13 23:32:06 字數 1114 閱讀 9686

棋類遊戲因變化無窮、富有趣味和益智功能,受到很多人的喜愛,西洋棋是其中一種。除了休閒娛樂,西洋棋中還有一些趣味知識,如八皇后問題。

提起八皇后問題,我們就要講到乙個人——高斯。高斯是德國著名的數學家、物理學家和天文學家。他的興趣愛好十分廣泛,常常在工作之餘獨自一人下棋。不過,他的下法與眾不同,其規則多數與他自己設計的一些數學問題有關。2023年,高斯又給自己提出了乙個象棋問題:在西洋棋棋盤,即8*8的棋盤上放8個「皇后」,保證它們之間不能互相攻擊,換言之,任意兩后不能位於棋盤的同一行、同一列或同一對角線上,滿足條件的放法有多少種?

其實,八皇后問題是乙個經典的回溯演算法問題。回溯法也稱為試探法,這種方法是指暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一列舉和檢驗。當發現當前候選解不可能是解時,就選擇下乙個候選解。倘若當前候選解除了還不滿足問題規模要求外,滿足所有其他要求時,繼續擴大當前候選解的規模,並繼續試探。如果當前候選解滿足包括問題規模在內的所有要求時,該候選解就是問題的乙個解。在回溯法中,放棄當前候選解,尋找下乙個候選解的過程稱為回溯。擴大當前候選解的規模,以繼續試探的過程稱為向前試探。換言之,回溯法就是允許在選擇失敗的情況下,系統地去嘗試完所有可能的選擇。

因而,在分析八皇后問題時,用回溯法來解決問題是很合適的:從乙個給定的位置出發有多種選擇,但不知道究竟哪種選擇才能解決問題。由於每乙個皇后擺放的位置都受到前乙個皇后落子位置的限制,所以越是最先落子的皇后,可選擇的位置就越多,越後放的皇后,可選擇的範圍就越小。當我們選擇採用回溯的方法解決八皇后問題時,先在棋盤上放上第1個皇后,然後再放上第2個,並保證第二個皇后和第乙個不互相攻擊。再接著放上第3個皇后,並滿足她與前兩個皇后都不會相互攻擊的條件,依此類推,直到所有的皇后都擺放上去。假如第7個皇后放上後,第8個皇后已經沒有安全的位置了,則要試著調整第7個皇后的位置,並再次調整第8個皇后的位置,看是否有安全的位置;如果第7個皇后的位置都已經嘗試過而第8個皇后還沒有安全的位置,則應試著調整第6個皇后的位置,重新調整第7、第8個皇后的位置。依此類推,並且有可能倒退到調整第1個皇后的位置。

所以,採用回溯的方法來解決八皇后問題,看似實現形式非常簡單,實際上這一過程的工作量十分巨大,尤其是當八皇后問題擴充套件到更多的時候。

回溯演算法 八皇后

總時間限制 1000ms 記憶體限制 65536kb 描述 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b 1b2....

回溯演算法 八皇后

今天學習了下回溯演算法,順便看了下經典案例 八皇后問題。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。回溯演算法的搜尋邏輯是深度優先,即,從一條路往前走,能進則進,不能進則...

八皇后演算法(回溯)

演算法描述 八皇后是一道很具典型性的題目。它的基本要求是這樣的 在乙個8 8的矩陣上面放置8個物體,乙個矩陣點只允許放置乙個物體,任意兩個點不能在一行上,也不能在一列上,不能在一條左斜線上,當然也不能在一條右斜線上。八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數...