回溯算法(Backtracking Algorithm)之八皇后问题
生活随笔
收集整理的這篇文章主要介紹了
回溯算法(Backtracking Algorithm)之八皇后问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 回溯算法思想
- 2. 算法應用
- 2.1 八皇后問題
1. 回溯算法思想
前面講過貪心算法并不能保證得到最優解,那怎么得到最優解呢?
- 回溯思想,有點類似枚舉搜索。枚舉所有的解,找到滿足期望的解。
- 為了有規律地枚舉所有可能的解,避免遺漏和重復,把問題求解的過程分為多個階段。
- 每個階段,我們都會面對一個岔路口,我們先隨意選一條路走,當發現這條路走不通的時候(不符合期望的解),就回退到上一個岔路口,另選一種走法繼續走。
2. 算法應用
2.1 八皇后問題
有一個8×8的棋盤,希望往里放8個棋子(皇后),每個棋子所在的行、列、對角線都不能有另一個棋子。請找到所有滿足這種要求的放棋子方式。
- 把這個問題劃分成8個階段,依次將8個棋子放到第一行、第二行、第三行。。。第八行
- 放置的過程中,不停地檢查當前的方法,是否滿足要求
- 如果滿足,則跳到下一行繼續放置棋子
- 如果不滿足,那就再換一種方法,繼續嘗試
- 如果一整行都不能放下一顆,那么這種方法無效,退到上一行,上一行列位置+1,再往下嘗試
從(0,0)位置開始放置
下標5的行,走到最后也沒有放下這顆棋子,都不滿足,那么退到下標4的行,列位置+1,從4列開始新的嘗試
下標5的行容不下一顆棋子,再次回退,下標4行退到最后了,再往上退,下標3行棋子往右挪
下標7行放不下,退到6行
6行也容不下棋子,接著看5行
5行也不可以容下棋子,看第4行。。。(第一種可行解怎么還沒出來,好累,就到這里吧,大家自行 ppt 畫個圖配合代碼推一下就理解了)
第一個解是這樣的,哈哈,挪了好長時間終于出來了
總結
以上是生活随笔為你收集整理的回溯算法(Backtracking Algorithm)之八皇后问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符串匹配算法(Trie树)
- 下一篇: 数据结构--二叉树 Binary Tre