橫向優(yōu)先搜尋breadth_第1頁(yè)
橫向優(yōu)先搜尋breadth_第2頁(yè)
橫向優(yōu)先搜尋breadth_第3頁(yè)
橫向優(yōu)先搜尋breadth_第4頁(yè)
橫向優(yōu)先搜尋breadth_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

8.3橫向優(yōu)先搜尋(breadthfirstsearch)問題:對(duì)於一個(gè)圖G=(V,E),任給兩個(gè)頂點(diǎn)i,j,試找一條連接頂點(diǎn)i與頂點(diǎn)

j的最短路徑。如果前面有路可以走,記錄所有可以走的路徑,依目前所有可以走的路徑再更進(jìn)一步找所有可以走的路徑,直到找到目的地,不然,找遍所有路徑也找不到目的地。利用橫向優(yōu)先的方式來尋找最短路徑,橫向優(yōu)先的基本精神是:例:一個(gè)簡(jiǎn)單圖如下所示。v0v1v6v3v5v7v2v4v8試找一條連接頂點(diǎn)0與頂點(diǎn)

7的最短路徑。依該圖的adjacencymatrix或adjacencylist由v0

可以走到v1、v2、v3及v6,以圖表示如下:v0v1v6v3v5v7v2v4v8走訪過的頂點(diǎn)以白色顯示,藍(lán)色的點(diǎn)表示已經(jīng)處理完成。以箭頭表示parent與child(先走到與後走到)的關(guān)係。v1無(wú)路可走。v2可以走到v4與v5。

v3可以走到v4

與v7,但v4

已經(jīng)走訪過了。目的地v7

找到了,可以停止搜尋。(v6無(wú)路可走,可以省略不必搜尋。)由目的地v7

沿著箭頭走向v3,再走向v0。<v0,v3,v7>就是一條最短路徑。v0v1v6v3v5v7v2v4v8以程式來處理路徑搜尋的問題,我們需要:一個(gè)adjacencylistL。visit103254768000000000parent103254768-1-1-1-1-1-1-1-1-1q8017263541236004060345246723578243413adjacencylistL

一個(gè)佇列q,每Dequeue

一次,取得一個(gè)頂點(diǎn)v,所有與v相鄰且未走訪的頂點(diǎn)全部Enqueue

到佇列q。一個(gè)陣列visit記錄頂點(diǎn)尚未走訪、走訪過與處理完成的資料,分別以0,1,2表示。一個(gè)陣列parent[k]記錄走訪頂點(diǎn)k之前的位置。例:由下列簡(jiǎn)單圖找一條連接頂點(diǎn)0與頂點(diǎn)7的最短路徑。v0v1v6v3v5v7v2v4v8先將頂點(diǎn)0Enqueue

到佇列q。visit103254768000000000q0parent103254768-1-1-1-1-1-1-1-1-1註明頂點(diǎn)0是已經(jīng)走訪的頂點(diǎn),即visit[0]=1。1頂點(diǎn)0是起點(diǎn)沒有parent,即parent[0]=-1。由佇列q執(zhí)行Dequeue,取得頂點(diǎn)0,將visit[0]改成2。由adjacencylistL,可以找到頂點(diǎn)1,2,3,6,與頂點(diǎn)0相鄰。visit103254768100000000parent103254768-1-1-1-1-1-1-1-1-18017263541236004060345246723578243413adjacencylistL頂點(diǎn)1,2,3,6,的visit[0]皆為0,即皆未走訪。將頂點(diǎn)1,2,3,6,Enqueue

到佇列上,同時(shí)將visit[]值改成1。並將頂點(diǎn)1,2,3,6,的parent改成0。2q00123611110000由佇列q執(zhí)行Dequeue,取得頂點(diǎn)1,將visit[1]改成2。由adjacencylistL,可以找到頂點(diǎn)0,6,與頂點(diǎn)1相鄰。visit103254768200001111parent103254768-1-1-1-1-100008017263541236004060345246723578243413adjacencylistL頂點(diǎn)0,6,的visit[]值皆不為0,即已走訪。q123612由佇列q執(zhí)行Dequeue,取得頂點(diǎn)2,將visit[2]改成2。由adjacencylistL,可以找到頂點(diǎn)0,3,4,5與頂點(diǎn)2相鄰。visit103254768200002111parent103254768-1-1-1-1-100008017263541236004060345246723578243413adjacencylistL頂點(diǎn)0,3,的visit[]值皆不為0。頂點(diǎn)4,5的visit[]值皆為0,即未走訪。q23622將頂點(diǎn)4,5Enqueue

到佇列上,同時(shí)將visit[]值改成1。並將頂點(diǎn)4,5的parent改成2。411225由佇列q執(zhí)行Dequeue,取得頂點(diǎn)3,將visit[3]改成2。由adjacencylistL,可以找到頂點(diǎn)0,2,4,6,7與頂點(diǎn)3相鄰。visit103254768211002121parent103254768-122-1-100008017263541236004060345246723578243413adjacencylistL頂點(diǎn)0,2,4,6的visit[]值皆不為0。頂點(diǎn)7的visit[7]值皆為0,即未走訪。2將頂點(diǎn)7Enqueue

到佇列上,同時(shí)將visit[7]值改成1。並將頂點(diǎn)7的parent改成3。頂點(diǎn)7為目的地,搜尋至此結(jié)束。13q364537visit103254768211012221parent103254768-122-1300008017263541236004060345246723578243413adjacencylistL頂點(diǎn)7為目的地,由陣列parent可以追查出最短路徑。q6457頂點(diǎn)7的parent是3。頂點(diǎn)3的parent是0。頂點(diǎn)0的parent是-1。由此可得最短路徑是<0,3,7>。scanf(“%d%d”,&i,&j);foundGoal=FALSE;Enqueue(i);visit[i]=1;while(!foundGoal){

if(isQueueEmpty())break;current=Dequeue();

currNode=L[current];

while(currNode!=NULL){k=currNode->vertex;

if(visit[k]==0){

Enqueue(k);

visit[k]=1;parent[k]=current;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論