8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案(一)
生活随笔
收集整理的這篇文章主要介紹了
8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
八皇后問題,是一個古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。1854年在柏林的象棋雜志上不同的作者發表了40種不同的解,后來有人用圖論的方法解出92種結果。計算機發明后,有多種計算機語言可以解決此問題。---------以上節選自百度百科。
算法思考,初步思路:
構建二維int或者short型數組,內存中模擬棋盤
chess[r][c]=0表示:r行c列沒有皇后,chess[r][c]=1表示:r行c列位置有一個皇后
從第一行第一列開始逐行擺放皇后
依題意每行只能有一個皇后,遂逐行擺放,每行一個皇后即可
擺放后立即調用一個驗證函數(傳遞整個棋盤的數據),驗證合理性,安全則擺放下一個,不安全則嘗試擺放這一行的下一個位置,直至擺到棋盤邊界
當這一行所有位置都無法保證皇后安全時,需要回退到上一行,清除上一行的擺放記錄,并且在上一行嘗試擺放下一位置的皇后(回溯算法的核心)
當擺放到最后一行,并且調用驗證函數確定安全后,累積數自增1,表示有一個解成功算出
驗證函數中,需要掃描當前擺放皇后的左上?
總結
以上是生活随笔為你收集整理的8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机栈原理
- 下一篇: 8皇后以及N皇后算法探究,回溯算法的JA