版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三節(jié)圖的遍歷
圖的遍歷:從某個(gè)頂點(diǎn)出發(fā),沿著某條搜索路徑對(duì)圖中每個(gè)頂點(diǎn)做
且僅做一次訪問(wèn)。圖的遍歷最常用的是深度優(yōu)先搜索遍歷和廣度優(yōu)先
搜索遍歷兩種方法。
一、深度優(yōu)先搜索遍歷
1、深度優(yōu)先搜索遍歷思想:
深度優(yōu)先搜索(DepthFirstSearch,DFS)遍歷類(lèi)似于樹(shù)的前序(先
根)遍歷。假設(shè)初始狀態(tài)是圖中所有頂點(diǎn)都未曾訪問(wèn)過(guò),則可從圖G中
任選一頂點(diǎn)V為初始出發(fā)點(diǎn),首先訪問(wèn)出發(fā)點(diǎn)V,并將其標(biāo)記為已訪
問(wèn)過(guò);然后依次從V出發(fā)搜索V的每個(gè)鄰接點(diǎn)W,若W未曾訪問(wèn)
過(guò),則以w作為新的出發(fā)點(diǎn)出發(fā),繼續(xù)進(jìn)行深度優(yōu)先遍歷,直到圖中
所有和V有路徑相通的頂點(diǎn)都被訪問(wèn)到;若此時(shí)圖中仍有頂點(diǎn)未被訪
問(wèn),則另選一個(gè)未曾訪問(wèn)的頂點(diǎn)作為起點(diǎn),重復(fù)上述過(guò)程,直到圖中
所有頂點(diǎn)都被訪問(wèn)到為止。
從Vo開(kāi)始的深度優(yōu)先搜索序列:V。,V1,V2,V5,V4,V6,V3,
V7,V8o
從V8開(kāi)始的深度優(yōu)先搜索序列:V8,V4,Vo,V1,V2,V5,V3,
V6,V7o
2、以鄰接矩陣為存儲(chǔ)結(jié)構(gòu)的深度優(yōu)先搜索遍歷算法
intvisited[20];
voidDFS(MGraphG,inti,intn)
{〃從頂點(diǎn)Vi出發(fā),深度優(yōu)先搜索遍歷圖G(鄰接矩陣結(jié)構(gòu))
intj;
printf("V%d^",i);〃假定訪問(wèn)頂點(diǎn)vi以輸
出該頂點(diǎn)的序號(hào)代之
visited[i]=l;〃標(biāo)記vi已訪問(wèn)過(guò)
for(j=0;j<n;j++)〃依次搜索vi的每個(gè)鄰
接點(diǎn)
if(G.arcs[i][j]==l&&!visited[j])
DFS(G,j,n);〃若(Vi,Vj)e(G),且Vj
未被訪問(wèn)過(guò),則從開(kāi)始遞歸調(diào)用
)
該算法的時(shí)間復(fù)雜度為O(n2)
3、以鄰接表為存儲(chǔ)結(jié)構(gòu)的深度優(yōu)先搜索遍歷算法
intvisited[20];〃全局量數(shù)組,用以標(biāo)記某個(gè)頂點(diǎn)是否被訪問(wèn)過(guò)
voidDFSI(ALGraphG,inti)
{〃從頂點(diǎn)Vi出發(fā),深度優(yōu)先搜索遍歷圖G(鄰接表結(jié)構(gòu))
EdgeNode*p;intj;
printf("V%d^",i);〃假定訪問(wèn)頂點(diǎn)vi以
輸出該頂點(diǎn)的序號(hào)代之
visited[i]=l;〃標(biāo)記vi已訪問(wèn)過(guò)
p=G[i].link;〃取Vi鄰接表的表頭
指針
while(p!=NuLL)〃依次搜索vi的每個(gè)
鄰接點(diǎn)
{j=p->adjvex;//]為vi的一個(gè)鄰接
點(diǎn)序號(hào)
if(!visited[)])
DFSI(GJ);〃若(vi,vj)GE(G),且
vj未被訪問(wèn)過(guò),則從開(kāi)始遞歸調(diào)用
p=p->next;〃使P指向vi的下
一個(gè)鄰接點(diǎn)
}//End-while
)
該算法的時(shí)間復(fù)雜度為O(n+e)o
二、廣度優(yōu)先搜索遍歷
1、廣度優(yōu)先搜索遍歷思想
廣度優(yōu)先搜索(BFS)遍歷類(lèi)似于樹(shù)的按層次遍歷。其基本思想是:首
先訪問(wèn)出發(fā)點(diǎn)Vi,接著依次訪問(wèn)Vi的所有未被訪問(wèn)過(guò)的鄰接點(diǎn)Vil,
Vi2,…,Vit,并均標(biāo)記為已訪問(wèn)過(guò),然后再按照Vil,Vi2,…,Vit
的次序,訪問(wèn)每一個(gè)頂點(diǎn)的所有未曾訪問(wèn)過(guò)的頂點(diǎn)并均標(biāo)記為已訪問(wèn)
過(guò),依次類(lèi)推,直到圖中所有和初始出發(fā)點(diǎn)Vi有路徑相通的頂點(diǎn)都被
訪問(wèn)過(guò)為止。
【例】
從Vo開(kāi)始的廣度優(yōu)先搜索序列:Vo,V1,V3,V4,V2,V6,V8,
V5,V7o
從V8開(kāi)始的廣度優(yōu)先搜索序列:V8,V4,Vo,Vl,V6,V3,V2,
v7,v5o
2、以鄰接矩陣為存儲(chǔ)結(jié)構(gòu)的廣度優(yōu)先搜索遍歷算法
intvisited[20];
voidBFS(MG、phG,inti,intn)
{〃從頂點(diǎn)Vi出發(fā),廣度優(yōu)先搜索遍歷圖G(鄰接矩陣結(jié)構(gòu))
cirQueueQ;〃定義一個(gè)
隊(duì)歹I」
intk,j;
InitQueue(&Q);〃初始化隊(duì)
printf("v%d->",i)〃假定訪問(wèn)頂
點(diǎn)vi用輸出該頂點(diǎn)的序號(hào)代之
visited[i]=l;〃標(biāo)記Vi已訪
問(wèn)過(guò)
EnQueue(&Q,i);〃將已訪問(wèn)的頂
點(diǎn)序號(hào)i入隊(duì)
while(!QueueEmpty(&Q))〃當(dāng)隊(duì)列非空
時(shí),循環(huán)處理vi的每個(gè)鄰接點(diǎn)
{k=DeQueue(&Q);〃刪除隊(duì)頭元
素
for(j=0;j<n;j++)〃依次搜索Vk
的每一個(gè)可能的
{if(G.arcs[k][j]==l&&!visited[j])
{printf("V%l,j);〃訪問(wèn)未曾訪問(wèn)
過(guò)的頂點(diǎn)vj
visited[j]=l;〃標(biāo)記Vi已訪問(wèn)
過(guò)
EnQueue(&Q,j);〃頂點(diǎn)序號(hào)j入隊(duì)
}//Endjf
}//End_for
}//End_while
)
該算法的時(shí)間復(fù)雜度為0(n2)
3、以鄰接表為存儲(chǔ)結(jié)構(gòu)的廣度優(yōu)先搜索遍歷算法
VoidBFSI(ALGraphG,inti,intn)
{〃從頂點(diǎn)Vi出發(fā),廣度優(yōu)先搜索遍歷圖G
CirQueueQ;〃定義一個(gè)隊(duì)列指針
intj,k;
InitQueue(&Q);〃初始化隊(duì)列
EdgeNode*p;
intvisited[20];
printf("v%d-*",i);〃假定訪問(wèn)頂點(diǎn)vi以輸出
該頂點(diǎn)的序號(hào)代之
visited[i]=l;〃標(biāo)記vi已訪問(wèn)過(guò)
EnQueue(&Q,i);〃將已訪問(wèn)的頂點(diǎn)序號(hào)i入
隊(duì)
while(!QueueEmpty(&Q))〃循環(huán)處理vi的每個(gè)鄰
接點(diǎn)
{k=DeQueue(&Q);〃刪除隊(duì)頭元素
p=G[k].link;〃取vk鄰接表的表頭指針
while(p!=NULL)〃依次搜索vk的每一個(gè)可能的
鄰接點(diǎn)
{j=p->adjvex;//Vj為Vk的一個(gè)鄰接點(diǎn)
if(!visited。])〃若vj未被訪問(wèn)過(guò)
{printf("V%d^",j);〃訪問(wèn)未曾訪問(wèn)過(guò)的頂點(diǎn)vj
visited[j]=1;〃標(biāo)記vj已訪問(wèn)過(guò)
EnQueue(&Q,j);/?點(diǎn)序號(hào)j入隊(duì)
}//End-if
p=p->next;〃使p指向Vk鄰接表的下一個(gè)
鄰接點(diǎn)
}//End_while
}//End_while
)
該算法的時(shí)間復(fù)雜度為
O(n+e)o
注意:由于圖G=(V,E)中頂點(diǎn)集合V與邊的集合E中元素的排
列是任意的,在采用鄰接表存儲(chǔ)以后,如果存放頂點(diǎn)結(jié)點(diǎn)的先后順序
不同,或者邊結(jié)點(diǎn)的鏈接次序不同,在按照某種方式遍歷圖時(shí),將會(huì)
影響到頂點(diǎn)被訪問(wèn)的先后JII頁(yè)序,即經(jīng)過(guò)遍歷得到的遍歷序列有可能不
同。即使存儲(chǔ)結(jié)構(gòu)確定,如果指定的出發(fā)頂點(diǎn)不同,遍歷結(jié)果也會(huì)不
同。當(dāng)然,對(duì)于某種已經(jīng)確定的存儲(chǔ)結(jié)構(gòu)與指定的出發(fā)頂點(diǎn),按照某
種遍歷方法得到的遍歷結(jié)果應(yīng)該是唯一的。
【真題選解】
(例題?單選題)在下圖中,從頂點(diǎn)1
出發(fā)進(jìn)行深度優(yōu)先遍歷可得到的序列是
0
A.1234567
B.1426375
C.1425367
D.1246537
隱藏答案
【答案】B
【解析】從頂點(diǎn)1出發(fā)進(jìn)行深度優(yōu)先遍歷:先訪問(wèn)1,然后可以訪
問(wèn)2,接下來(lái)不可能訪問(wèn)3,(所以選項(xiàng)A錯(cuò)誤),可以訪問(wèn)4,接下
來(lái)可以5,不可能訪問(wèn)6,(所以選項(xiàng)D錯(cuò)誤)。先訪問(wèn)1,然后可
以訪問(wèn)4,再訪問(wèn)2,接下來(lái)可以6,不可能訪問(wèn)5,(所以選項(xiàng)C錯(cuò)
誤)。選項(xiàng)B:1426375是從頂點(diǎn)1出發(fā)進(jìn)行深度優(yōu)先遍歷可得
到的序列。
012345
(例題?單選題)已知含6個(gè)頂點(diǎn)(VO,VI,。國(guó)。011000
1工1101100
)的無(wú)向圖的鄰接矩陣如圖所11QQ01
V2,V3,V4,V5"13010000
4*4000QQ1
示,則從頂點(diǎn)V0出發(fā)進(jìn)行深度優(yōu)先遍歷可能得5國(guó)5001QI0
到的頂點(diǎn)訪問(wèn)序列為()
A.(VO,VI,V2,V5,V4,V3)
B.(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游餐飲住宿工作匯報(bào)
- 微粒貸逾期立案通知函
- 關(guān)注網(wǎng)絡(luò)安全主題班會(huì)
- 2025違約責(zé)任(適用主設(shè)計(jì)合同)
- 2025公司租房協(xié)議書(shū)合同范
- 廣西南寧市2024-2025學(xué)年高二上學(xué)期期末考試 地理 含答案
- 2025最簡(jiǎn)單的銷(xiāo)售合同
- 2025關(guān)于渣土清運(yùn)合同范本
- 教育行業(yè)員工招聘清晰引流
- 快消品行業(yè)美工的市場(chǎng)需求
- 2025寒假散學(xué)典禮(休業(yè)式)上校長(zhǎng)精彩講話:以董宇輝的創(chuàng)新、羅振宇的堅(jiān)持、馬龍的熱愛(ài)啟迪未來(lái)
- 安徽省示范高中2024-2025學(xué)年高一(上)期末綜合測(cè)試物理試卷(含答案)
- 安徽省合肥市包河區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題
- 《酸堿罐區(qū)設(shè)計(jì)規(guī)范》編制說(shuō)明
- PMC主管年終總結(jié)報(bào)告
- 售樓部保安管理培訓(xùn)
- 倉(cāng)儲(chǔ)培訓(xùn)課件模板
- 2025屆高考地理一輪復(fù)習(xí)第七講水循環(huán)與洋流自主練含解析
- GB/T 44914-2024和田玉分級(jí)
- 2024年度企業(yè)入駐跨境電商孵化基地合作協(xié)議3篇
- 《形勢(shì)與政策》課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論