?? 1108.txt
字號(hào):
1108 holedox moving
這個(gè)題是一個(gè)比較經(jīng)典的廣度搜索題,其最與眾不同的地方是搜索元素從一個(gè)點(diǎn)變成了一條線,從而加大了搜索過(guò)程中的狀態(tài)保存的難度。
最開(kāi)始看到這個(gè)題時(shí),覺(jué)得就是迷宮方面的類似問(wèn)題,只要將蛇每移動(dòng)一步后的地圖狀態(tài)重新刷新就可以,但在寫(xiě)搜索的過(guò)程中,遇到幾個(gè)問(wèn)題:
1.地圖的變化情況不好表示
2.每走一步后的步數(shù)是否最優(yōu),即蛇是不是在向著出口方向移動(dòng)不能判斷,因而造成了很多重復(fù)的搜索情況。
解決方法:
對(duì)蛇到達(dá)任何一個(gè)點(diǎn)時(shí),整條蛇所處的狀態(tài)作為一個(gè)單獨(dú)變量進(jìn)行保存,即蛇以不同姿態(tài)到達(dá)同一點(diǎn)被認(rèn)為是不同的一種方案。開(kāi)一個(gè)數(shù)組map[20][20][16*1024],則map[i][j][k]表示蛇頭在(i,j)點(diǎn)時(shí),其蛇身所處的姿態(tài)為map[i][j][k]由于每次的蛇的移動(dòng)只需要考慮頭和尾的狀態(tài)變化,所以可以用相對(duì)位置來(lái)表示蛇各段身體與蛇頭的位置從而表示出整條蛇的姿態(tài),上,下,左,右分別用2位二進(jìn)制數(shù)來(lái)表示,則最多表示一條蛇需要14位二進(jìn)制數(shù),蛇移動(dòng)時(shí)利用二進(jìn)制數(shù)的左,右移來(lái)處理,再利用廣度搜索即可。
注:此題解法還有幾種,如liulike的圖論方法及比較有難度的深度搜索等
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -