亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                算法|八皇后問題理解回溯法

                算法|八皇后問題理解回溯法

                回溯算法從空解開始,并逐步擴展該解。搜索遞歸地通過各種不同的構(gòu)造解決方案的路徑。

                例如,考慮計算n皇后問題:在n*n的棋盤上放置彼此不受攻擊的n個皇后。

                (皇后可以攻擊在同一行、同一列、同一斜線上的棋子)

                按以上規(guī)則:同一行或同一列或同一斜線上只能有一個皇后,同一行或同一列上必須有一個皇后。

                n皇后問題的解空間是一棵n叉樹,樹的深度為n。

                當n為4時,有兩種可能的解決方案:

                八皇后問題對于每一行是否可以放置皇后,可用一個規(guī)模為8的循環(huán)去判斷。每一行的判斷操作相同,如果操作完成了8行(放置了8個皇后),便求出了一個解。所以該問題可以用遞歸去做。如果某一行全部位置無法放置皇后時,沒必要繼續(xù)深入,可以回溯到上一步,也就是使用回溯法。對于非尾遞歸,遞歸函數(shù)回退時,遞歸點后面的代碼就是遞歸函數(shù)回退后執(zhí)行的部分。對于八皇后問題,上述的循環(huán)可以判斷某行下一列是否可以放置皇后,而上一列放置皇后的操作進行逆操作后便完成了回溯(遞歸有天然的回退階段)。

                八皇后問題的暴力枚舉搜索或遞歸解法會形成一個棵8叉完全樹,回溯解法可以通過約束條件避免一些搜索繼續(xù)深入,形成一棵8叉不完全樹。

                為簡便起見,我們可以用四皇后問題去理解,然后泛化到一般的情況。

                在底層,前三種配置是非法的,因為皇后們互相攻擊。然而,第四種配置是有效的,可以通過在棋盤上再放置兩個皇后來擴展到完整的解決方案。只有一種方法可以放置剩下的兩個皇后。

                如下面左圖所示:

                從y=0,x=0開始,search(0)遞歸調(diào)用search(1)(x=2,y=1),遞歸調(diào)用search(2)

                當y=2,x=3時,遞歸函數(shù)search(2)執(zhí)行完畢,回退到search(1),x=0,逆操作,循環(huán)到x=3……

                code demo:

                #include #define n 4int column[n*2] = {0};int diag1[n*2] = {0};int diag2[n*2] = {0};int count = 0;void search(int y) { if (y == n) { count++; return; } for (int x = 0; x < n; x++) { if (column[x] || diag1[x+y] || diag2[x-y+n-1]) continue; column[x] = diag1[x+y] = diag2[x-y+n-1] = 1; search(y+1); column[x] = diag1[x+y] = diag2[x-y+n-1] = 0; // 回退時的逆操作,下一輪循環(huán)x++ } return;}main(){ search(0); printf("%d",count); getchar();}/*n=4, 2n=8, 92n=16, 14772512*/

                搜索從調(diào)用search(0)開始。棋盤的大小為n*n,代碼計算要計數(shù)的解決方案數(shù)。

                代碼假設(shè)棋盤的行和列編號從0到n-1。當使用參數(shù)y調(diào)用函數(shù)搜索時,它會在行y上放置皇后,然后使用參數(shù)y-1調(diào)用自身。然后,如果y=n,則已找到解決方案,變量count增加1。

                數(shù)組column跟蹤包含皇后的列,數(shù)組diag1和diag2跟蹤對角線。不允許在已包含皇后的列或?qū)蔷€中添加其他皇后。例如,4*4棋盤編號如下,當x、y取不同的值時,對應(yīng)列方向column[x]、”/”方向上diag1[x+y]、””方向上diag2[x-y+4-1]的取值為0時表示無皇后:

                y 2,x=3

                回溯。

                y 1,x=3

                ……

                count=1。

                回溯到下面綠色點:

                繼續(xù)逐步回溯:

                ……

                count=2。

                繼續(xù)逐步回溯,最后count=2。

                可視化操作的網(wǎng)頁地址:

                https://pythontutor.com/render.html#mode=display

                -End-

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年8月22日 09:10
                下一篇 2022年8月22日 09:10

                相關(guān)推薦

                • 存儲過程語法(sql server存儲過程語法)

                  今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

                  2022年11月26日
                • 百度關(guān)鍵詞快速排名的4大原理解析(百度怎么刷關(guān)鍵詞)

                  近期百度公告驚雷算法2.0,升級之快還是第一次吧,看來百度對于刷點擊行為是零容忍了。之前尹華峰SEO技術(shù)博客介紹過一篇如何使用刷點擊工具,其實市面上有很多這類SEO快速排名的軟件,…

                  2022年11月25日
                • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

                  直播帶貨無論是對于商家來說還是主播收益都是非??捎^的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

                  2022年11月24日
                • 不思議迷宮圍棋少年答題答案大全 東郭棋院題目答案匯

                  不思議迷宮圍棋少年活動中的答題答案是什么?完成答題之后是可以得到很多獎勵的,活動中的答題題目有很多,這些題目的詳情小編已經(jīng)分享在下面,另外關(guān)于圍棋少年全部答題的答案下面也有介紹,幫…

                  2022年11月23日
                • 快手限流多久能解除(快手限流什么意思)

                  我相信很多人都看中了快手平臺的商機,都爭先恐后地想要搶占機會,可一些人剛剛作出一點成績,就被降權(quán)了,自己也不知道什么原因。所以今天就來聊聊快手賬號降權(quán)操作分享,趕快來看看避免違規(guī)!…

                  2022年11月23日
                • Win11 22H2再出新問題Bug:無法彈出USB設(shè)備

                  作為Windows 11的首次大更新,在Win11 22H2發(fā)布后并沒有帶來預想的場景,各種問題頻現(xiàn)成為了一種常態(tài)。 近日有消息稱,Win11 22H2存在一個占用沖突Bug,當用…

                  2022年11月22日
                • 馬斯克凌晨一點半曬“代碼審查”現(xiàn)場,編排他的段子比瘋狂星期四還多

                  夢晨 Pine 發(fā)自 凹非寺 量子位 | 公眾號 QbitAI 每一個真正會寫代碼的人,請在下午2點到總部10層報到。 每一個真正會寫代碼的人,請在下午2點到總部10層報到。 馬斯…

                  2022年11月21日
                • 美團月付300小額取現(xiàn)?美團月付取現(xiàn)300不見了

                  很多上班族每天都在使用美團點外賣,你知道美團現(xiàn)在推出了一款類似花唄的產(chǎn)品嗎?可以在美團消費的時候先消費后還款,叫做美團月付,是美團推出的一款消費型產(chǎn)品,不能直接提現(xiàn)到銀行卡,只能用…

                  2022年11月21日
                • 3階魔方教程 1~7步驟(魔方教程一步一步圖解)

                  基礎(chǔ)層先魔方復原法 by信手拈花 0. 魔方轉(zhuǎn)動的公式表示和復原步驟 0. 1魔方轉(zhuǎn)動的公式表示 魔方轉(zhuǎn)動的公式表示 0. 2層先法魔方復原步驟 層先法魔方復原步驟 讓我開始魔方復…

                  2022年11月18日
                • 沒帶卡怎么在ATM機取款(無卡取款怎么操作)

                  刷臉消費支付已經(jīng)十分方便,最近不少銀行根據(jù)這種刷臉技術(shù),提供了刷臉存取款的業(yè)務(wù)。我們不需要帶卡,就可以直接刷臉取款。下面讓我們來看看具體怎么操作。 刷臉取款怎么操作? 【1】我們找…

                  2022年11月17日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息