什么是八皇后問(wèn)題?
八皇后問(wèn)題是一個(gè)古老的問(wèn)題,于1848年由一位國(guó)際象棋棋手提出:在8×8格的國(guó)際象棋上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,如何求解?
解決思路
遞歸回溯.?從棋盤的第一行開始嘗試擺放第一個(gè)皇后,擺放成功后,遞歸一層,再遵循規(guī)則在棋盤第二行來(lái)擺放第二個(gè)皇后。如果當(dāng)前位置無(wú)法擺放,則向右移動(dòng)一格再次嘗試,如果擺放成功,則繼續(xù)遞歸一層,擺放第三個(gè)皇后......
如果某一層看遍了所有格子,都無(wú)法成功擺放,則回溯到上一個(gè)皇后,讓上一個(gè)皇后右移一格,再進(jìn)行遞歸。如果八個(gè)皇后都擺放完畢且符合規(guī)則,那么就得到了其中一種正確的解法。
遞歸回溯過(guò)程(同一行只會(huì)有一只皇后)
1.第一層遞歸,嘗試在第一行擺放第一個(gè)皇后:
2.第二層遞歸,嘗試在第二行擺放第二個(gè)皇后(前兩格被第一個(gè)皇后封鎖,只能落在第三格)
3.第三層遞歸,嘗試在第三行擺放第三個(gè)皇后(前四格被第一第二個(gè)皇后封鎖,只能落在第五格)
4.第四層遞歸,嘗試在第四行擺放第四個(gè)皇后(第一格被第二個(gè)皇后封鎖,只能落在第二格)
5.第五層遞歸,嘗試在第五行擺放第五個(gè)皇后(前三格被前面的皇后封鎖,只能落在第四格)
6.由于所有格子都“綠了”,第六行已經(jīng)沒(méi)辦法擺放皇后,于是進(jìn)行回溯,重新擺放第五個(gè)皇后到第八格
7.第六行仍然沒(méi)有辦法擺放皇后,第五行也已經(jīng)嘗試遍了,于是回溯到第四行,重新擺放第四個(gè)皇后到第七格
8.繼續(xù)擺放第五個(gè)皇后,以此類推......
代碼實(shí)現(xiàn)
1.定義一個(gè)長(zhǎng)度8的二維數(shù)組表示棋盤,數(shù)組初始值是0,代表沒(méi)有落子。當(dāng)有皇后放置的時(shí)候,對(duì)應(yīng)的元素值改為1
2.定義check方法,檢查合法性
3.遞歸回溯
4.結(jié)果輸出
其中一種結(jié)果:
10000000
00001000
00000001
00000100
00100000
00000010
01000000
00010000
參考文章:漫畫:什么是八皇后問(wèn)題?