




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)五圖的遍歷及其應(yīng)用實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康?.熟悉圖常用的存儲(chǔ)結(jié)構(gòu)。2.掌握在圖的鄰接矩陣和鄰接表兩種結(jié)構(gòu)上實(shí)現(xiàn)圖的兩種遍歷方法實(shí)現(xiàn)。3.會(huì)用圖的遍歷解決簡(jiǎn)單的實(shí)際問(wèn)題。二、需求分析很多問(wèn)題都是建立在圖的遍歷的基礎(chǔ)上實(shí)現(xiàn)的,所以必須有一個(gè)程序能夠?qū)崿F(xiàn)將圖進(jìn)行廣度和深度遍歷,必須對(duì)圖的所有節(jié)點(diǎn)進(jìn)行訪問(wèn)。以無(wú)向圖為例,以無(wú)向圖的鄰接表和鄰接矩陣為存儲(chǔ)結(jié)構(gòu),分別實(shí)現(xiàn)對(duì)圖進(jìn)行廣度和深度遍歷。以用戶(hù)指定的結(jié)點(diǎn)為起點(diǎn),分別輸出每種遍歷下的結(jié)點(diǎn)訪問(wèn)序列和相應(yīng)的生成樹(shù)的邊集。三、實(shí)驗(yàn)內(nèi)容[題目一]:從鍵盤(pán)上輸入圖的頂點(diǎn)和邊的信息,建立圖的鄰接表存儲(chǔ)結(jié)構(gòu),然后以深度優(yōu)先搜索和廣度優(yōu)先搜索遍歷該圖,并輸出起對(duì)應(yīng)的遍歷序列.試設(shè)計(jì)程序?qū)崿F(xiàn)上述圖的類(lèi)型定義和基本操作,完成上述功能。該程序包括圖類(lèi)型以及每一種操作的具體的函數(shù)定義和主函數(shù)。112534提示:輸入示例上圖的頂點(diǎn)和邊的信息輸入數(shù)據(jù)為:
57DGABCDE
ABAEBCCDDADBEC四、結(jié)構(gòu)算法模塊:typedefstructArcNode//定義鄰接表結(jié)構(gòu){ intadjvex;//該弧所指向的頂點(diǎn)的位置structArcNode*nextarc;//指向下一條弧的指針}ArcNode;typedefstructVNode//定義頂點(diǎn)結(jié)構(gòu)類(lèi)型{ chardata;//存放頂點(diǎn)信息ArcNode*firstarc;//指向第一條依附于該定點(diǎn)的指針}VNode,Adjlist[MAX_VEX_NUM];typedefstructALGraph{ Adjlistvertices; intvexnum; intarcnum;}ALGraph;五、相關(guān)函數(shù)設(shè)計(jì)Create_DG(ALGraph&G)//創(chuàng)建一個(gè)有向圖圖的鄰接鏈表表示DFSTraverse(ALGraphG,intvex)//對(duì)圖G做深度優(yōu)先遍歷BFSTraverse(ALGraphG)//有向圖的廣度遍歷,從第v個(gè)頂點(diǎn)出發(fā),v為頂點(diǎn)下標(biāo)locatevex(ALGraphG,charv)//圖的基本操作,尋找頂點(diǎn)位置的下標(biāo)DFS(ALGraphG,intv)//從第v個(gè)頂點(diǎn)出發(fā)遞歸地深度優(yōu)先遍歷圖G創(chuàng)建圖:請(qǐng)輸入圖的頂點(diǎn)數(shù)和弧數(shù)圖的創(chuàng)建輸入圖深度優(yōu)先遍歷的起點(diǎn)輸入圖的頂點(diǎn)信息深度優(yōu)先遍歷圖廣度優(yōu)先遍歷圖結(jié)束六、程序流程圖創(chuàng)建圖:請(qǐng)輸入圖的頂點(diǎn)數(shù)和弧數(shù)圖的創(chuàng)建輸入圖深度優(yōu)先遍歷的起點(diǎn)輸入圖的頂點(diǎn)信息深度優(yōu)先遍歷圖廣度優(yōu)先遍歷圖結(jié)束七、運(yùn)行結(jié)果截圖最初程序運(yùn)行界面如下:輸入圖的先相關(guān)信息后運(yùn)行結(jié)果(其中深度優(yōu)先遍歷的起點(diǎn)選擇的是字符所在序列的序號(hào),且0是起點(diǎn)),一下是深度優(yōu)先遍歷時(shí)選擇不同的起點(diǎn)所出現(xiàn)的最終運(yùn)行結(jié)果:程序源代碼://圖的鄰接表表示:#include<iostream>#include<malloc.h>#include<queue>usingnamespacestd;#defineMAX_VEX_NUM20//宏定義數(shù)組最大intvisited[MAX_VEX_NUM];//設(shè)置標(biāo)志數(shù)組queue<int>q;typedefstructArcNode//定義鄰接表結(jié)構(gòu){ intadjvex;//該弧所指向的頂點(diǎn)的位置structArcNode*nextarc;//指向下一條弧的指針}ArcNode;typedefstructVNode//定義頂點(diǎn)結(jié)構(gòu)類(lèi)型{ chardata;//存放頂點(diǎn)信息ArcNode*firstarc;//指向第一條依附于該定點(diǎn)的指針}VNode,Adjlist[MAX_VEX_NUM];typedefstructALGraph{ Adjlistvertices; intvexnum; intarcnum;}ALGraph;ALGraphG;//申明一個(gè)無(wú)向圖的鄰接矩陣類(lèi)型intlocatevex(ALGraphG,charv)//圖的基本操作,尋找頂點(diǎn)位置的下標(biāo){ inti=0; while(i<G.vexnum&&v!=G.vertices[i].data) i++; if(i<G.vexnum) returni;}voidCreate_DG(ALGraph&G)//創(chuàng)建一個(gè)有向圖圖的鄰接鏈表表示{ cout<<"請(qǐng)輸入圖的頂點(diǎn)數(shù)和弧數(shù):"<<endl; cin>>G.vexnum; cin>>G.arcnum; charv1; charv2; intv1locate; intv2locate; ArcNode*p; cout<<"輸入圖的頂點(diǎn)信息"<<endl; for(inti=0;i<G.vexnum;i++)//構(gòu)造表頭向量 { cin>>G.vertices[i].data;//輸入頂點(diǎn)值 G.vertices[i].firstarc=NULL;//初始化指針 } cout<<"請(qǐng)輸入從起點(diǎn)到終點(diǎn)的一條弧所對(duì)應(yīng)的頂點(diǎn)"<<endl; for(intk=1;k<=G.arcnum;k++)//輸入各弧并創(chuàng)建十字鏈表 { cin>>v1>>v2;//輸入一條弧的起點(diǎn)和終點(diǎn)v1locate=locatevex(G,v1);//確定v1在圖G中位置v2locate=locatevex(G,v2);//確定v2在圖G中位置 p=newArcNode;//假定有足夠空間 p->adjvex=v2locate;//有一條弧指向v2 p->nextarc=G.vertices[v1locate].firstarc;//對(duì)弧節(jié)點(diǎn)賦值 G.vertices[v1locate].firstarc=p;//完成在入弧和出弧鏈表的插入/*q=newArcNode; q->adjvex=v1locate; q->nextarc=G.vertices[v2locate].firstarc; G.vertices[v2locate].firstarc=q;*/ }}//Create_DGvoidDFS(ALGraphG,intv)//從第v個(gè)頂點(diǎn)出發(fā)遞歸地深度優(yōu)先遍歷圖G{visited[v]=1;//訪問(wèn)第v個(gè)節(jié)點(diǎn) cout<<G.vertices[v].data<<"";//輸出節(jié)點(diǎn)值 for(ArcNode*p=G.vertices[v].firstarc;p;p=p->nextarc) { if(!visited[p->adjvex])DFS(G,p->adjvex);//對(duì)v的尚未訪問(wèn)的鄰接頂點(diǎn)p遞歸調(diào)用dfs }}//DFSvoidDFSTraverse(ALGraphG,intvex)//對(duì)圖G做深度優(yōu)先遍歷{ for(inti=0;i<G.vexnum;i++) visited[i]=0; //訪問(wèn)數(shù)組初始化 DFS(G,vex); //先對(duì)圖從指定定點(diǎn)訪問(wèn) for(intv=0;v<G.vexnum;v++) //對(duì)可能出現(xiàn)的子圖遍歷 if(!visited[v])//對(duì)尚未訪問(wèn)的頂點(diǎn)調(diào)用dfs DFS(G,v);}//DFSTraverseintBFSTraverse(ALGraphG)//無(wú)向圖的廣度遍歷,從第v個(gè)頂點(diǎn)出發(fā),v為頂點(diǎn)下標(biāo){for(inti=0;i<G.vexnum;i++) //訪問(wèn)數(shù)組初始化 visited[i]=0; q.empty();intv; intu; for(v=0;v<G.vexnum;v++) if(!visited[v])//v尚未被訪問(wèn) { visited[v]=1; cout<<G.vertices[v].data<<""; q.push(v);//V入隊(duì)列 while(!q.empty()) { u=q.front();//對(duì)頭元素出隊(duì)并置為u q.pop(); for(ArcNode*p=G.vertices[v].firstarc;p;p=p->nextarc) if(!visited[p->adjvex])//p為u的尚未訪問(wèn)的鄰接節(jié)點(diǎn) { visited[p->adjvex]=1; cout<<G.vertices[p->adjvex].data<<""; q.push(p->adjvex); }//if }//while }//if return1;}/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年農(nóng)業(yè)職業(yè)經(jīng)理人數(shù)字營(yíng)銷(xiāo)試題及答案
- 會(huì)計(jì)專(zhuān)業(yè)核心課程
- 寵物驅(qū)蟲(chóng)考試題及答案大全
- 初三政治課程內(nèi)容
- 肩頸專(zhuān)業(yè)知識(shí)培訓(xùn)課件
- 職工健康知識(shí)培訓(xùn)課件
- 調(diào)酒師的情緒管理與調(diào)控題及答案
- 美甲甲床知識(shí)培訓(xùn)課件
- 美容師護(hù)理知識(shí)培訓(xùn)課件
- 2024年福建事業(yè)單位考試的指導(dǎo)原則與試題及答案
- 濟(jì)寧港主城港區(qū)躍進(jìn)溝航道工程項(xiàng)目一期工程導(dǎo)助航及監(jiān)控系統(tǒng)施工招標(biāo)文件
- 國(guó)開(kāi)學(xué)習(xí)網(wǎng)電大數(shù)據(jù)庫(kù)應(yīng)用技術(shù)第四次形考作業(yè)實(shí)驗(yàn)答案
- 公司與公司簽訂勞務(wù)合同范本
- 第十四講 建設(shè)鞏固國(guó)防和強(qiáng)大人民軍隊(duì)PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 五年級(jí)下冊(cè)語(yǔ)文第五單元《形形色色的人》習(xí)作一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 色織物工藝設(shè)計(jì)2
- 液壓系統(tǒng)符號(hào)
- 年會(huì)頒獎(jiǎng)晚會(huì)頒獎(jiǎng)盛典簡(jiǎn)約PPT模板
- 綏江縣農(nóng)村飲水安全工程水質(zhì)檢測(cè)中心建設(shè)方案
- 鉗工-實(shí)操技能試題
- GB/T 33474-2016物聯(lián)網(wǎng)參考體系結(jié)構(gòu)
評(píng)論
0/150
提交評(píng)論