下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
圖的遍歷概念1、 圖的遍歷和樹的遍歷類似,圖的遍歷也是從某個(gè)頂點(diǎn)出發(fā),沿著某條搜索路徑對圖中每個(gè)頂點(diǎn)各做一次且僅做一次訪問。它是許多圖的算法的基礎(chǔ)。深度優(yōu)先遍歷和廣度優(yōu)先遍歷是最為重要的兩種遍歷圖的方法。它們對無向圖和有向圖均適用。注意:以下假定遍歷過程中訪問頂點(diǎn)的操作是簡單地輸出頂點(diǎn)。2、 布爾向量visited[0..n-1]的設(shè)置圖中任一頂點(diǎn)都可能和其它頂點(diǎn)相鄰接。在訪問了某頂點(diǎn)之后,又可能順著某條回路又回到了該頂點(diǎn)。為了避免重復(fù)訪問同一個(gè)頂點(diǎn),必須記住每個(gè)已訪問的頂點(diǎn)。為此,可設(shè)一布爾向量visited[0..n-1],其初值為假,一旦訪問了頂點(diǎn)Vi之后,便將visited[i]置為真。深度優(yōu)先遍歷(Depth-FirstTraversal)圖的深度優(yōu)先遍歷的遞歸定義假設(shè)給定圖G的初態(tài)是所有頂點(diǎn)均未曾訪問過。在G中任選一頂點(diǎn)v為初始出發(fā)點(diǎn)(源點(diǎn)),則深度優(yōu)先遍歷可定義如下:首先訪問出發(fā)點(diǎn)v,并將其標(biāo)記為已訪問過;然后依次從v出發(fā)搜索v的每個(gè)鄰接點(diǎn)嘰若可未曾訪問過,則以w為新的出發(fā)點(diǎn)繼續(xù)進(jìn)行深度優(yōu)先遍歷,直至圖中所有和源點(diǎn)v有路徑相通的頂點(diǎn)(亦稱為從源點(diǎn)可達(dá)的頂點(diǎn))均已被訪問為止。若此時(shí)圖中仍有未訪問的頂點(diǎn),則另選一個(gè)尚未訪問的頂點(diǎn)作為新的源點(diǎn)重復(fù)上述過程,直至圖中所有頂點(diǎn)均已被訪問為止。圖的深度優(yōu)先遍歷類似于樹的前序遍歷。采用的搜索方法的特點(diǎn)是盡可能先對縱深方向進(jìn)行搜索。這種搜索方法稱為深度優(yōu)先搜索(Depth-FirstSearch)0相應(yīng)地,用此方法遍歷圖就很自然地稱之為圖的深度優(yōu)先遍歷。2、 深度優(yōu)先搜索的過程設(shè)x是當(dāng)前被訪問頂點(diǎn),在對x做過訪問標(biāo)記后,選擇一條從x出發(fā)的未檢測過的邊(x,y)。若發(fā)現(xiàn)頂點(diǎn)y已訪問過,則重新選擇另一條Mx出發(fā)的未檢測過的邊,否則沿邊(x,y)到達(dá)未曾訪問過的y,對y訪問并將其標(biāo)記為已訪問過;然后從y開始搜索,直到搜索完從y出發(fā)的所有路徑,即訪問完所有從y出發(fā)可達(dá)的頂點(diǎn)之后,才回溯到頂點(diǎn)x,并且再選擇一條從x出發(fā)的未檢測過的邊。上述過程直至龐出發(fā)的所有邊都已檢測過為止。此時(shí),若x不是源點(diǎn),則回溯到在x之前被訪問過的頂點(diǎn);否則圖中所有和源點(diǎn)有路徑相通的頂點(diǎn)(即從源點(diǎn)可達(dá)的所有頂點(diǎn))都已被訪問過,若圖G是連通圖,則遍歷過程結(jié)束,否則繼續(xù)選擇一個(gè)尚未被訪問的頂點(diǎn)作為新源點(diǎn),進(jìn)行新的搜索過程。3、深度優(yōu)先遍歷的遞歸算法(1)深度優(yōu)先遍歷算法typedefenum{FALSE,TRUE}Boolean;//FALSE為0,TRUE為1Booleanvisited[MaxVertexNum];〃訪問標(biāo)志向量是全局量voidDFSTraverse(ALGraph*G){〃深度優(yōu)先遍歷以鄰接表表示的圖G,而以鄰接矩陣表示G時(shí),算法完全與此相同inti;for(i=0;i<G->n;i++)visited[i]=FALSE;〃標(biāo)志向量初始化for(i=0;i<G->n;i++)if(!visited[i])//vi未訪問過DFS(G,i);〃以vi為源點(diǎn)開始DFS搜索}//DFSTraverse鄰接表表示的深度優(yōu)先搜索算法voidDFS(ALGraph*G,inti){〃以vi為出發(fā)點(diǎn)對鄰接表表示的圖G進(jìn)行深度優(yōu)先搜索EdgeNode*p;printf("visitvertex:%c”,G->adjlist[i].vertex);〃訪問頂點(diǎn)vivisited[i]=TRUE;〃標(biāo)記vi已訪問p=G->adjlist[i].firstedge;〃取vi邊表的頭指針while(p){//依次搜索vi的鄰接點(diǎn)vj,這里j=p->adjvexif(!visited[p->adjvex])//若vi尚未被訪問DFS(G,p->adjvex);//則以Vj為出發(fā)點(diǎn)向縱深搜索p=p->next;〃找vi的下一鄰接點(diǎn)}}//DFS鄰接矩陣表示的深度優(yōu)先搜索算法voidDFSM(MGraph*G,inti){〃以vi為出發(fā)點(diǎn)對鄰接矩陣表示的圖G進(jìn)行DFS搜索,設(shè)鄰接矩陣是0,l矩陣intj;printf("visitvertex:%c",G->vexs[i]);〃訪問頂點(diǎn)vivisited[i]=TRUE;for(j=0;j<G->n;j++)//依次搜索vi的鄰接點(diǎn)if(G->edges[i][j]==1&&!visited[j])DFSM(G,j)//(vi,vj)EE,且vj未訪問過,故vj為新出發(fā)點(diǎn)}//DFSM注意:遍歷操作不會修改圖G的內(nèi)容,故上述算法中可將G定義為ALGraph或MGraph類型的參數(shù),而不一定要定義為ALGraph和MGraph的指針類型。但基于效率上的考慮,選擇指針類型的參數(shù)為宜。4、深度優(yōu)先遍歷序列對圖進(jìn)行深度優(yōu)先遍歷時(shí),按訪問頂點(diǎn)的先后次序得到的頂點(diǎn)序列稱為該圖的深度優(yōu)先遍歷序列,或簡稱為DFS序列。一個(gè)圖的DFS序列不一定惟一當(dāng)從某頂點(diǎn)x出發(fā)搜索時(shí),若x的鄰接點(diǎn)有多個(gè)尚未訪問過,則我們可任選一個(gè)訪問之。源點(diǎn)和存儲結(jié)構(gòu)的內(nèi)容均已確定的圖的DFS序列惟一①鄰接矩陣表示的圖確定源點(diǎn)后,DFS序列惟一DFSM算法中,當(dāng)從vi出發(fā)搜索時(shí),是在鄰接矩陣的第i行上從左至右選擇下一個(gè)未曾訪問過的鄰接點(diǎn)作為新的出發(fā)點(diǎn),若這樣的鄰接點(diǎn)多于一個(gè),則選中的總是序號較小的那一個(gè)?!纠繉B通圖G7用鄰接矩陣表示時(shí),以v0為初始出發(fā)點(diǎn)的DFS遍歷過程如下圖(a)所示,具體算法的執(zhí)行過程【參見動畫演示】。DFS序列是v0,v1,v2,v5,v4,v6,v3,v7②只有給出了鄰接表的內(nèi)容及初始出發(fā)點(diǎn),才能惟一確定其DFS序列鄰接表作為給定圖的存儲結(jié)構(gòu)時(shí),其表示不惟一。因?yàn)猷徑颖砩线叡砝锏泥徑狱c(diǎn)域的內(nèi)容與建表時(shí)的輸入次序相關(guān)。因此,只有給出了鄰接表的內(nèi)容及初始出發(fā)點(diǎn),才能惟一確定其DFS序列?!纠窟B通圖G7用鄰接表表示時(shí),以v0為初始出發(fā)點(diǎn)的DFS算法的執(zhí)行過程和DFS序列【參見動畫演示】(3)棧在深度優(yōu)先遍歷算法中的作用深度優(yōu)先遍歷過程中,后訪問的頂點(diǎn)其鄰接點(diǎn)被先訪問,故在遞歸調(diào)用過程中使用棧(系統(tǒng)運(yùn)行時(shí)刻棧)來保存已訪問的頂點(diǎn)。5、算法分析對于具有n個(gè)頂點(diǎn)和e條邊的無向圖或有向圖,遍歷算法DFSTraverse對圖中每頂點(diǎn)至多調(diào)用一次DFS或DFSM。從DFSTraverse中調(diào)用DFS(或DFSM)及DFS(或DFSM)內(nèi)部遞歸調(diào)用自己的總次數(shù)為n。當(dāng)訪問某頂點(diǎn)vi時(shí),DFS(或DFSM)的時(shí)間主要耗費(fèi)在從該頂點(diǎn)出發(fā)搜索它的所有鄰接點(diǎn)上。用鄰接矩陣
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會議管理制度
- 吉水縣綜合交通運(yùn)輸事業(yè)發(fā)展中心2026年面向社會公開招聘1名司機(jī)及1名系統(tǒng)操作員的備考題庫及參考答案詳解1套
- 2026年莆田市城廂法院招聘備考題庫及一套參考答案詳解
- 2026年長沙水業(yè)集團(tuán)有限公司社會招聘備考題庫含答案詳解
- 2026年達(dá)州這家國企招聘備考題庫完整答案詳解
- 2026年浙江舟山群島新區(qū)浙東化工科技產(chǎn)業(yè)有限公司招聘備考題庫及一套參考答案詳解
- 2026年黑河辰陽礦業(yè)投資開發(fā)有限公司招聘備考題庫及一套參考答案詳解
- 企業(yè)員工培訓(xùn)與職業(yè)發(fā)展目標(biāo)路徑素質(zhì)制度
- 企業(yè)內(nèi)部控制與合規(guī)制度
- 2026年黃山市歙州農(nóng)文旅發(fā)展集團(tuán)有限公司招聘8人備考題庫及一套完整答案詳解
- 影視立項(xiàng)轉(zhuǎn)讓合同范本
- 胸痛救治單元培訓(xùn)
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫及1套完整答案詳解
- DZ∕T 0399-2022 礦山資源儲量管理規(guī)范(正式版)
- 大樹移植操作規(guī)程
- 安保員巡查記錄表
- 中考數(shù)學(xué)常見幾何模型簡介
- 鐵路工程施工組織設(shè)計(jì)指南-2009版(常用版)
- 新媒體數(shù)據(jù)分析與應(yīng)用學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 老年人綜合能力評估實(shí)施過程-評估工作文檔及填寫規(guī)范
- cobas-h-232心肌標(biāo)志物床邊檢測儀操作培訓(xùn)
評論
0/150
提交評論