麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区
首頁
|
新聞
|
娛樂
|
游戲
|
科普
|
文學
|
編程
|
系統
|
數據庫
|
建站
|
學院
|
產品
|
網管
|
維修
|
辦公
|
熱點
首頁
>
編程
>
C
> 正文
深入N皇后問題的兩個最高效算法的詳解
2020-01-26 16:09:01
字體:
大
中
小
來源:
轉載
供稿:網友
N皇后問題是一個經典的問題,在一個N*N的棋盤上放置N個皇后,每行一個并使其不能互相攻擊(同一行、同一列、同一斜線上的皇后都會自動攻擊)。
一、 求解N皇后問題是算法中回溯法應用的一個經典案例
回溯算法也叫試探法,它是一種系統地搜索問題的解的方法。回溯算法的基本思想是:從一條路往前走,能進則進,不能進則退回來,換一條路再試。
在現實中,有很多問題往往需要我們把其所有可能窮舉出來,然后從中找出滿足某種要求的可能或最優的情況,從而得到整個問題的解。回溯算法就是解決這種問題的“通用算法”,有“萬能算法”之稱。N皇后問題在N增大時就是這樣一個解空間很大的問題,所以比較適合用這種方法求解。這也是N皇后問題的傳統解法,很經典。
下面是算法的高級偽碼描述,這里用一個N*N的矩陣來存儲棋盤:
1) 算法開始, 清空棋盤,當前行設為第一行,當前列設為第一列
2) 在當前行,當前列的位置上判斷是否滿足條件(即保證經過這一點的行,列與斜線上都沒有兩個皇后),若不滿足,跳到第4步
3) 在當前位置上滿足條件的情形:
在當前位置放一個皇后,若當前行是最后一行,記錄一個解;
若當前行不是最后一行,當前行設為下一行, 當前列設為當前行的第一個待測位置;
若當前行是最后一行,當前列不是最后一列,當前列設為下一列;
若當前行是最后一行,當前列是最后一列,回溯,即清空當前行及以下各行的棋盤,然后,當前行設為上一行,當前列設為當前行的下一個待測位置;
以上返回到第2步
4) 在當前位置上不滿足條件的情形:
若當前列不是最后一列,當前列設為下一列,返回到第2步;
若當前列是最后一列了,回溯,即,若當前行已經是第一行了,算法退出,否則,清空當前行及以下各行的棋盤,然后,當前行設為上一行,當前列設為當前行的下一個待測位置,返回到第2步;
算法的基本原理是上面這個樣子,但不同的是用的數據結構不同,檢查某個位置是否滿足條件的方法也不同。為了提高效率,有各種優化策略,如多線程,多分配內存表示棋盤等。
在具體解決該問題時,可以將其拆分為幾個小問題。首先就是在棋盤上如何判斷兩個皇后是否能夠相互攻擊,在最初接觸這個問題時,首先想到的方法就是把棋盤存儲為一個二維數組,然后在需要在第i行第j列放置皇后時,根據問題的描述,首先判斷是在第i行是否有皇后,由于每行只有一個皇后,這個判斷也可以省略,然后判斷第j列是否有皇后,這個也很簡單,最后需要判斷在同一斜線上是否有皇后,按照該方法需要判斷兩次,正對角線方向和負對角線方向,總體來說也不難。但是寫完之后,總感覺很笨,因為在N皇后問題中這個函數的使用次數太多了,而這樣做效率較差,個人感覺很不爽。上網查看了別人的實現之后大吃一驚,大牛們都是使用一個一維數組來存儲棋盤,在某個位置上是否有皇后可以相互攻擊的判斷也很簡單。具體細節如下:
把棋盤存儲為一個N維數組a[N],數組中第i個元素的值代表第i行的皇后位置,這樣便可以把問題的空間規模壓縮為一維O(N),在判斷是否沖突時也很簡單,首先每行只有一個皇后,且在數組中只占據一個元素的位置,行沖突就不存在了,其次是列沖突,判斷一下是否有a[i]與當前要放置皇后的列j相等即可。至于斜線沖突,通過觀察可以發現所有在斜線上沖突的皇后的位置都有規律即它們所在的行列互減的絕對值相等,即| row 主站蜘蛛池模板:
成人一级在线
|
1级毛片在线观看
|
日韩字幕在线
|
国产一区精品视频
|
羞羞色网站
|
欧美一级特黄a
|
av免费入口
|
国产精品久久久久久久久久久天堂
|
精品一区二区三区在线观看国产
|
羞羞视频免费网站含羞草
|
japanese massage tube
|
72pao成人国产永久免费视频
|
一本色道久久综合狠狠躁篇适合什么人看
|
日本aaaa片毛片免费观蜜桃
|
日韩欧美电影在线观看
|
日韩一级片
|
91九色视频观看
|
免费观看一区二区三区视频
|
91看片王
|
素人视频免费观看
|
高清国产免费
|
黄色一级毛片免费看
|
福利免费在线观看
|
日韩视频1
|
日韩大片在线永久观看视频网站免费
|
久久精品亚洲欧美日韩精品中文字幕
|
国产午夜精品久久久久久免费视
|
欧美性受xxxx白人性爽
|
国产激情精品一区二区三区
|
9191久久久久视频
|
精品一区二区久久久久久按摩
|
日韩毛片在线看
|
情侣啪啪网站
|
国产一级性生活视频
|
亚洲午夜免费电影
|
日韩视频―中文字幕
|
午夜精品老牛av一区二区三区
|
国产一区二区免费
|
国产精品av久久久久久无
|
亚洲精品免费播放
|
一级黄色影片在线观看
|