下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、滾動(dòng)廣搜我們知道樸素廣搜的空間浪費(fèi)很嚴(yán)重,原因很簡單,樸素廣搜將從初始節(jié)點(diǎn)開始可以達(dá)到的所有狀態(tài)全都下來了,而這樣需要消耗的空間代價(jià)是指數(shù)級的。所有使用廣搜時(shí),空間就顯得很寶貴。于是我們開始尋找對狀態(tài)儲存的優(yōu)化,以減小對空間的消耗。一類典型的題目(求迷宮中到達(dá)某一個(gè)位置的最少步數(shù)),可以用到一種思想滾動(dòng)廣搜。滾動(dòng)廣搜的思想就是用到兩個(gè)表來儲存前一個(gè)階段可以達(dá)到的所有狀態(tài)和當(dāng)前階段可以達(dá)到的所有狀態(tài)。因?yàn)檫@一步能到達(dá)的所有位置只由上一步的位置決定,而所有的位置的集合規(guī)模是 n*m(分別表示迷宮的長和寬)。我們只需要開兩個(gè)大小為 n*m 的表就可以保證能所有可能達(dá)到的位置了。每次取出前一階段所有狀
2、態(tài)節(jié)點(diǎn),并按照產(chǎn)生式規(guī)則對其擴(kuò)展并存入當(dāng)前階段的表內(nèi)。然后通過 now:=1-now 不斷切換前一階段與當(dāng)前階段,(注意:每次要對當(dāng)前階段的表和標(biāo)記數(shù)組進(jìn)行清空)。1下面給出滾動(dòng)廣搜的數(shù)據(jù)結(jié)構(gòu):type rec=record節(jié)點(diǎn)的描述,包括橫縱、坐標(biāo),根據(jù)題目不同可適當(dāng)添加 x,y:integer;end;var q:array0.1,1.maxn*maxm of rec; 0、1 分別表示當(dāng)前階段和前一個(gè)階段 r:array0.1 of longint; 兩個(gè)表對應(yīng)的尾指針 used:array1.maxn,1.maxm of Boolean;標(biāo)記(u,v)是否以可到達(dá)2以下是滾動(dòng)廣搜的pr
3、ocedure rollbfs;var i,f,u,v:integer;begin算法部分。now:=0;rnow:=1;qnow,1.x:=fx;qnow,1.y:=fy;初始化,將起點(diǎn)位置入隊(duì) repeatnow:=1-now; rnow:=0; fillchar(used,sizeof(used),0);切換到當(dāng)前階段,置隊(duì)列為空,將 used 標(biāo)記數(shù)組清空for f:=1 to r1-now do取出前一階段的所有狀態(tài)節(jié)點(diǎn)并對其進(jìn)行擴(kuò)展 beginfor i:=1 to maxway do枚舉對于該位置所有可能的擴(kuò)展方向 beginu:=q1-now,f.x+ai;a,b 分別為橫、縱
4、方向上的增量v:=q1-now,f.y+bi;if (mapu,v可達(dá)到) and(not(usedu,v)(u,v)未被標(biāo)記過 then begininc(rnow); if (rnown*m) then exit; qnow,rnow.x:=u;,qnow,rnow.y:=v; usedu,v:=true;if (u=ex)and(v=ey) then如果達(dá)到終點(diǎn)則打應(yīng)并結(jié)束算法begin writeln(time);close(output);halt; end;end; end;end; until 01;end;參考題目:穿越線最后的戰(zhàn)犯SEARCH迷宮附:最后的戰(zhàn)犯題目描述:話說
5、Lucky 和 Feli 以 3721犬蠢一狼(以下簡稱小犬)在全軍為誘餌, 滅了大批日軍。但頑固的日軍軍官小之后仍然不肯認(rèn)輸。他躲在山區(qū)的一個(gè)巖洞中,等待日軍的救援。他妄圖憑借復(fù)雜的地形躲避我軍的追蹤。于是,總部派出足智多謀的 Feli前往巖洞搜尋小犬。Feli 來到巖洞復(fù)雜,為一個(gè)正方形,其中布滿了區(qū)域或者是空地,或者是不可逾越的,發(fā)現(xiàn)巖洞其實(shí)是一個(gè)巨大的迷宮。迷宮地形極為物。迷宮可以分為 N*N(2N100)個(gè)區(qū)域,每個(gè)物。小犬就躲藏在其中某一個(gè)區(qū)域內(nèi)。由于小犬已經(jīng)忍受了幾天的饑餓,F(xiàn)eli 進(jìn)入迷宮時(shí)他已經(jīng)失去思維處于迷亂狀態(tài)。小犬每秒鐘只會沿著他的方向直線前進(jìn),如果遇到物或者迷宮邊界
6、,他會立刻向右轉(zhuǎn) 90 度(花去時(shí)間),繼續(xù)沿直線前進(jìn)(初始方向向北)。Feli 每秒鐘可以決定往哪個(gè)方向走。如果同一時(shí)刻 Feli 與小犬位于同一個(gè)區(qū)域,或者相鄰的區(qū)域(非對角線相鄰),F(xiàn)eli 可以立刻將小犬抓住。Feli 本來打算先確定小犬的位置,然后沿最短路線抓住他,但是 Feli 前進(jìn)時(shí)小犬同時(shí)也在移動(dòng),就不能采取這種方法了。請你幫助 Feli 確定所用的時(shí)間最短。案,使 Feli 抓獲小犬?dāng)?shù)據(jù)說明:輸入數(shù)據(jù)第一行是一個(gè)整數(shù) N。以下 N 行每行N 個(gè)字符,“*”表示巖洞中的物,“.”表示空地,“J”表示小犬(一開始他會向北走),“F”表示 Feli。上北下南左西右東。輸出數(shù)據(jù)僅一行
7、,如果 Feli 能抓到小犬,那么輸出所需的最短時(shí)間,如果 Feli 抓不到小犬,那么這個(gè)最后的有出口),此時(shí)輸出“No戰(zhàn)犯將在巖洞中(因?yàn)?Feli 將在離開的時(shí)候封閉巖洞的所solution.”,不要輸出引號。樣例輸入(maze.in)樣例輸出(maze.out)源程序: program maze;type rec=record x,y:integer; end;const a:array1.4 of integer=(0,1,0,-1);33F*J.*.b:array1.4 of integer=(-1,0,1,0); var q:array0.1,1.10000 of rec;r:ar
8、ray0.1 of longint; map:array0.101,0.101 of integer; used:array0.101,0.101 of boolean; i,j,k,time,p,m,fx,fy,ex,ey,now:longint;d:char;procedure try; var j:integer; beginj:=0;ex:=ex+ap;ey:=ey+bp;while mapex,ey=0 do begininc(j);if j=5 then begin writeln(No solution.);close(output);halt; end; ex:=ex-ap;e
9、y:=ey-bp;inc(p);if p=5 then p:=1; ex:=ex+ap;ey:=ey+bp; end;end;procedure rollbfs;var i,f,u,v:integer; beginnow:=0;rnow:=1;qnow,1.x:=fx;qnow,1.y:=fy;p:=1; repeatinc(time);try;now:=1-now; rnow:=0; fillchar(used,sizeof(used),0); for f:=1 to r1-now dobeginfor i:=1 to 4 do beginu:=q1-now,f.x+ai;v:=q1-now
10、,f.y+bi;if (mapu,v=1) and (not(usedu,v) then begininc(rnow); if (rnow=10000) then exit; qnow,rnow.x:=u;qnow,rnow.y:=v;usedu,v:=true;if (u=ex)and(v=ey) or (u+1=ex)and(v=ey)or (u-1=ex)and(v=ey) or (u=ex)and(v+1=ey) or (u=ex)and(v-1=ey) thenbegin writeln(time);close(output);halt; end;end; end;until 01;
11、end;end;beginassign(input,maze.in);reset(input); assign(output,maze.out);rewrite(output); readln(m);fillchar(map,sizeof(map),0); for i:=1 to m dobeginfor j:=1 to m do beginread(d); case d of.:mapj,i:=1;*:mapj,i:=0;F:begin mapj,i:=1;fx:=j;fy:=i;J:begin mapj,i:=1;ex:=j;ey:=i; end;end;readln; end;close(input);end;end;if (ma
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物業(yè)保安人員雇傭合同3篇
- 2025年度海參產(chǎn)品期貨交易合同3篇
- 2024汽車維修中心場地租賃合同與車庫租賃服務(wù)協(xié)議3篇
- 成都醫(yī)學(xué)院《影視制作技術(shù)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都醫(yī)學(xué)院《材料與形式》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都體育學(xué)院《全球生態(tài)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都理工大學(xué)工程技術(shù)學(xué)院《新媒體宣傳策劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都理工大學(xué)工程技術(shù)學(xué)院《多聲部音樂分析與習(xí)作三》2023-2024學(xué)年第一學(xué)期期末試卷
- 人工湖防水施工方案
- 2024年甲乙雙方關(guān)于城市綜合體建設(shè)項(xiàng)目彩鋼工程承包合同
- 機(jī)械設(shè)備租賃保障措施
- 腳手架施工驗(yàn)收表
- 刑事案件律師會見筆錄
- 危險(xiǎn)性較大的分部分項(xiàng)工程監(jiān)理巡視表-有限空間
- 2023-2024學(xué)年成都市成華區(qū)六上數(shù)學(xué)期末監(jiān)測模擬試題含答案
- 2023-2024學(xué)年六盤水市六枝特區(qū)六年級數(shù)學(xué)第一學(xué)期期末質(zhì)量檢測模擬試題含答案
- ECS-700系統(tǒng)控制系統(tǒng)介紹
- 粉末涂料有限公司原、輔料庫安全風(fēng)險(xiǎn)分級清單
- 六上語文必讀名著《小英雄雨來》考點(diǎn)總結(jié)
- THNNJ 0001-2023 農(nóng)用連棟鋼架大棚技術(shù)規(guī)范
- 垃圾分類文獻(xiàn)綜述
評論
0/150
提交評論