日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漫画:什么是八皇后问题

發(fā)布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫画:什么是八皇后问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自?漫畫:什么是八皇后問題?

題目是什么意思呢?


國際象棋中的皇后,可以橫向、縱向、斜向移動。如何在一個8X8的棋盤上放置8個皇后,使得任意兩個皇后都不在同一條橫線、豎線、斜線方向上


讓我們來舉個栗子,下圖的綠色格子是一個皇后在棋盤上的“封鎖范圍”,其他皇后不得放置在這些格子:




下圖的綠色格子是兩個皇后在棋盤上的“封鎖范圍”,其他皇后不得放置在這些格子:




那么,如何遵循規(guī)則,同時放置這8個皇后呢?讓我們來看看小灰的回答。






———————————









什么是八皇后問題?


八皇后問題是一個古老的問題,于1848年由一位國際象棋棋手提出:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,如何求解?


以高斯為代表的許多數(shù)學(xué)家先后研究過這個問題。后來,當(dāng)計算機問世,通過計算機程序的運算可以輕松解出這個問題。







如何解決八皇后問題?


所謂遞歸回溯,本質(zhì)上是一種枚舉法。這種方法從棋盤的第一行開始嘗試擺放第一個皇后,擺放成功后,遞歸一層,再遵循規(guī)則在棋盤第二行來擺放第二個皇后。如果當(dāng)前位置無法擺放,則向右移動一格再次嘗試,如果擺放成功,則繼續(xù)遞歸一層,擺放第三個皇后......


如果某一層看遍了所有格子,都無法成功擺放,則回溯到上一個皇后,讓上一個皇后右移一格,再進行遞歸。如果八個皇后都擺放完畢且符合規(guī)則,那么就得到了其中一種正確的解法。


說起來有些抽象,我們來看一看遞歸回溯的詳細(xì)過程。


1.第一層遞歸,嘗試在第一行擺放第一個皇后




2.第二層遞歸,嘗試在第二行擺放第二個皇后(前兩格被第一個皇后封鎖,只能落在第三格):




3.第三層遞歸,嘗試在第三行擺放第三個皇后(前四格被第一第二個皇后封鎖,只能落在第五格):




4.第四層遞歸,嘗試在第四行擺放第四個皇后(第一格被第二個皇后封鎖,只能落在第二格):




5.第五層遞歸,嘗試在第五行擺放第五個皇后(前三格被前面的皇后封鎖,只能落在第四格):




6.由于所有格子都“綠了”,第六行已經(jīng)沒辦法擺放皇后,于是進行回溯,重新擺放第五個皇后第八格。:




7.第六行仍然沒有辦法擺放皇后,第五行也已經(jīng)嘗試遍了,于是回溯到第四行,重新擺放第四個皇后第七格。:




8.繼續(xù)擺放第五個皇后,以此類推......







八皇后問題的代碼實現(xiàn)?


解決八皇后問題,可以分為兩個層面:

1.找出第一種正確擺放方式,也就是深度優(yōu)先遍歷。

2.找出全部的正確擺放方式,也就是廣度優(yōu)先遍歷。


由于篇幅優(yōu)先,我們本篇只介紹如何找出第一種正確擺放方式。



在研究代碼實現(xiàn)的時候,我們需要解決幾個問題:


1.國際象棋的棋盤如何表示?

很簡單,用一個長度是8的二維數(shù)組來表示即可。



由于這里使用的是int數(shù)組,int的初始值是0,代表沒有落子。當(dāng)有皇后放置的時候,對應(yīng)的元素值改為1。


在這里,二維數(shù)組的第一個維度代表橫坐標(biāo),第二個維度代表縱坐標(biāo),并且從0開始。比如chessBoard[3][4]代表的是棋盤第四行第五列格子的狀態(tài)。



2.如何判斷皇后的落點是否合規(guī)?

定義一個check方法,傳入新皇后的落點,通過縱向和斜向是否存在其他皇后來判斷是否合規(guī)。



3.如何進行遞歸回溯?

遞歸回溯是本算法的核心,代碼邏輯有些復(fù)雜




4.如何輸出結(jié)果?

這個問題很簡單,直接遍歷二維數(shù)組并輸出就可以。



5.如何把這些方法串起來?

在main函數(shù)里分三步來調(diào)用:

第一步:初始化

第二步:遞歸擺放皇后

第三步:最后輸出結(jié)果。


其中Queen8是整個類的名字。



最終輸出如下:


10000000

00001000

00000001

00000100

00100000

00000010

01000000

00010000







幾點補充:


1.由于篇幅原因,這一篇只講了如何找出第一種正確的八皇后擺放。大家如果有興趣,可以對文中的代碼稍作改動,實現(xiàn)找出所有八皇后擺放的代碼。


2.本漫畫純屬娛樂,還請大家盡量珍惜當(dāng)下的工作,切勿模仿小灰的行為哦。




總結(jié)

以上是生活随笔為你收集整理的漫画:什么是八皇后问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。