什么是八皇后問(wèn)題?
八皇后問(wèn)題是一個(gè)古老的問(wèn)題赖草,于1848年由一位國(guó)際象棋棋手提出:在8×8格的國(guó)際象棋上擺放八個(gè)皇后,使其不能互相攻擊剪个,即任意兩個(gè)皇后都不能處于同一行秧骑、同一列或同一斜線上,如何求解扣囊?
解決思路
遞歸回溯.?從棋盤(pán)的第一行開(kāi)始嘗試擺放第一個(gè)皇后乎折,擺放成功后,遞歸一層侵歇,再遵循規(guī)則在棋盤(pán)第二行來(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è)皇后玖像,以此類(lèi)推......
代碼實(shí)現(xiàn)
1.定義一個(gè)長(zhǎng)度8的二維數(shù)組表示棋盤(pán),數(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