




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)四 圖的深度優(yōu)先與廣度優(yōu)先遍歷實(shí)驗(yàn)時(shí)間:2011年5月12日,12:50 -15:50(地點(diǎn):7-215)實(shí)驗(yàn)?zāi)康模豪斫鈭D的邏輯特點(diǎn);掌握理解圖的兩種主要存儲(chǔ)結(jié)構(gòu)(鄰接矩陣和鄰接表),掌握?qǐng)D的構(gòu)造、深度優(yōu)先遍歷、廣度優(yōu)先遍歷算法。具體實(shí)驗(yàn)題目:(任課教師根據(jù)實(shí)驗(yàn)大綱自己指定)每位同學(xué)按下述要求實(shí)現(xiàn)相應(yīng)算法: 根據(jù)從鍵盤輸入的數(shù)據(jù)創(chuàng)建圖(圖的存儲(chǔ)結(jié)構(gòu)可采用鄰接矩陣或鄰接表),并對(duì)圖進(jìn)行深度優(yōu)先搜索和廣度優(yōu)先搜索1)問題描述:在主程序中提供下列菜單: 1圖的建立 2深度優(yōu)先遍歷圖 3廣度優(yōu)先遍歷圖 0結(jié)束2)實(shí)驗(yàn)要求:圖的存儲(chǔ)可采用鄰接表或鄰接矩陣;定義下列過程: creategraph():
2、 按從鍵盤的數(shù)據(jù)建立圖 dfsgrahp():深度優(yōu)先遍歷圖 bfsgrahp():廣度優(yōu)先遍歷圖(1)算法設(shè)計(jì)思路簡介先定義鄰接矩陣和鄰接表類型,實(shí)現(xiàn)鄰接表和鄰接矩陣的相互轉(zhuǎn)換,輸出鄰接表和鄰接矩陣,再實(shí)現(xiàn)深度和廣度優(yōu)先遍歷(2)算法描述:可以用自然語言、偽代碼或流程圖等方式vertextype; /頂點(diǎn)類型mgraph; /圖的鄰接矩陣類型arcnode; /定義鄰接表類型void dispmat(mgraph g) /輸出鄰接矩陣void mattolist(mgraph g,algraph *&g) /將鄰接矩陣g轉(zhuǎn)換為鄰接表gvoid dispadj(algraph *g) /輸出鄰
3、接表void listtomat(algraph *g,mgraph g) /將鄰接表轉(zhuǎn)換為鄰接矩陣的形式void dfs(algraph *g,int v) /遞歸深度優(yōu)先遍歷void bfs(algraph *g,int v) /廣度優(yōu)先遍歷(3)算法的實(shí)現(xiàn)和測(cè)試結(jié)果:包括算法運(yùn)行時(shí)的輸入、輸出,實(shí)驗(yàn)中出現(xiàn)的問題及解決辦法等有個(gè)問題,不知如何實(shí)現(xiàn)輸入矩陣源代碼:#include#include#define max 100 /最大頂點(diǎn)個(gè)數(shù)typedef struct /以下定義臨接矩陣類型int number; /頂點(diǎn)編號(hào)int info; /頂點(diǎn)其他信息,邊的權(quán)值vertextype;
4、/頂點(diǎn)類型typedef struct /圖的定義int edgesmaxmax; /鄰接矩陣int n,e; /頂點(diǎn)數(shù)和弧數(shù) vertextype vexsmax; /存放定點(diǎn)信息mgraph; /圖的鄰接矩陣類型 /定義鄰接表類型typedef struct anode /弧的結(jié)點(diǎn)結(jié)構(gòu)類型int adjvex; /弧的重點(diǎn)位置,就是放值的struct anode *nextarc; /指向下一條弧的指針int info; /存放弧的信息(權(quán)值)arcnode;typedef struct vnode int data; /鄰接表頭結(jié)點(diǎn)的的類型arcnode *firstarc; /指向第一
5、條弧vnode;typedef vnode adjlistmax; /adjlist是鄰接表類型,把大表變成幾個(gè)小的連接到一起typedef struct adjlist adjlist; /鄰接表int n,e; /圖中頂點(diǎn)數(shù)和和邊數(shù)algraph; /圖的鄰接表類型int visitedmax; /全局?jǐn)?shù)組用于判斷后面節(jié)點(diǎn)是否被訪問過void dispmat(mgraph g) /輸出鄰接矩陣int i,j;for(i=0;ig.n;i+)for(j=0;jg.n;j+)if(g.edgesij=0)printf(0 );else printf(%d ,g.edgesij);printf(
6、n);void mattolist(mgraph g,algraph *&g) /將鄰接矩陣g轉(zhuǎn)換為鄰接表gint i,j;int n=g.n; /n為頂點(diǎn)數(shù)arcnode *p; /弧節(jié)點(diǎn)結(jié)構(gòu)的類型g=(algraph *)malloc(sizeof(algraph);for(i=0;iadjlisti.firstarc=null;for(i=0;in;i+) /檢查鄰接矩陣的每個(gè)元素for(j=0;jadjvex=j; /這是小節(jié)點(diǎn)的放值的域,只要他的列值,鏈?zhǔn)奖碇灰f明節(jié)點(diǎn)之間有關(guān)系就行,指終點(diǎn)位置p-info=g.edgesij; /存放邊的權(quán)值p-nextarc=g-adjlisti
7、.firstarc; /將*p連接到表后g-adjlisti.firstarc=p;g-e=g.e;g-n=g.n; void dispadj(algraph *g) /輸出鄰接表 int i;arcnode *p; /弧的類型for(i=0;in;i+)p=g-adjlisti.firstarc;if(p!=null)printf( %d: ,i); /這是那個(gè)大鏈表的頭while(p!=null) /順著那個(gè)頭向下查看printf( %d ,p-adjvex); /輸出弧的終點(diǎn)p=p-nextarc; printf(n);void change(int visited,algraph *g
8、) /給全局變量visited賦初值int i;for(i=0;in;i+)visitedi=0;void listtomat(algraph *g,mgraph g) /將鄰接表轉(zhuǎn)換為鄰接矩陣的形式int i,j;int n=g-n;arcnode *p;for(i=0;in;i+)for(j=0;jn;j+)g.edgesij=0;for(i=0;iadjlisti.firstarc;while(p!=null)g.edgesip-adjvex=p-info;p=p-nextarc;g.n=n;g.e=g-e;void dfs(algraph *g,int v) /遞歸深度優(yōu)先遍歷arcn
9、ode *p;/change(visited,g);visitedv=1; /第一個(gè)點(diǎn)設(shè)為已被訪問并輸出,接著以他為主進(jìn)行遍歷printf( %d,v); p=g-adjlistv.firstarc;while(p!=null)if(visitedp-adjvex=0)dfs(g,p-adjvex);p=p-nextarc; void bfs(algraph *g,int v) /廣度優(yōu)先遍歷,一個(gè)點(diǎn)先找和其有關(guān)的所有節(jié)點(diǎn),在接著按步驟繼續(xù)arcnode *p;int queuemax,front=0,rear=0; /定義循環(huán)隊(duì)列并初始化int visitedmax;int w,i;for(
10、i=0;in;i+)visitedi=0;printf( %d ,v); /把輸入的第v個(gè)作為第一個(gè)廣度遍歷的節(jié)點(diǎn),一直這樣進(jìn)行下去visitedv=1; rear=(rear+1)%max; /要入隊(duì)了queuerear=v; /把v入隊(duì)while(front!=rear) /隊(duì)列不為空的時(shí)候front=(front+1)%max; /要出隊(duì)了w=queuefront;p=g-adjlistw.firstarc; /跟前面差不多開始查找與頂點(diǎn)w鄰接的第一個(gè)頂點(diǎn)了while(p!=null)if(visitedp-adjvex=0) /就是當(dāng)前節(jié)點(diǎn)未被訪問printf(%d ,p-adjvex
11、);visitedp-adjvex=1;rear=(rear+1)%max; /又要入隊(duì)了,馬上要重復(fù)之前的操作了queuerear=p-adjvex;p=p-nextarc;printf(n);void main()int i,j;mgraph g;algraph *g; /沒有定義過的鄰接表類型加上*int amax6; printf(請(qǐng)輸入鄰接矩陣:n);for(i=0;i6;i+)for(j=0;j6;j+)scanf(%d,&aij);g.n=6;g.e=10;for(i=0;ig.n;i+)for(j=0;jg.n;j+)g.edgesij=aij; /這是給鄰接矩陣賦值printf(這是圖的鄰接矩陣的形式:);printf(n);dispmat(g); /輸出鄰接矩陣的函數(shù)g=(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基礎(chǔ)護(hù)理知識(shí)培訓(xùn)課件
- 醫(yī)院普法知識(shí)培訓(xùn)課件
- 7.3+萬有引力理論的成就練習(xí)-2021-2022學(xué)年高一下學(xué)期物理人教版(2019)必修第二冊(cè)
- DB31∕T 600-2012 豬附紅細(xì)胞體PCR檢測(cè)方法
- 企業(yè)新年致辭與戰(zhàn)略規(guī)劃演講
- 數(shù)控原理第1章
- 2025年延安貨運(yùn)從業(yè)資格證考試模擬考試
- 人力資源管理實(shí)踐操作測(cè)試卷
- 2025年黃山道路貨運(yùn)從業(yè)資格證模擬考試官方題下載
- 跨文化適應(yīng)性設(shè)計(jì)指南實(shí)施
- 辦公用品及耗材采購服務(wù)投標(biāo)方案(技術(shù)方案)
- 四川省公務(wù)員考試行測(cè)真題
- (212題)2024綜合基礎(chǔ)知識(shí)考試題庫及解析
- 探索多元化的員工安全意識(shí)培訓(xùn)方式
- 論電視劇《知否知否應(yīng)是綠肥紅瘦》的現(xiàn)代家庭教育觀及啟示
- 病歷終末質(zhì)控(質(zhì)控或醫(yī)務(wù)科病歷質(zhì)控)
- 2024屆高考安徽省江南十校聯(lián)考物理試卷(含答案)
- 湖北省煙草專賣局系統(tǒng)考試真題2023
- PEP小學(xué)英語三年級(jí)上冊(cè)Unit3Look-at-me說課比賽課件
- 中建“百項(xiàng)新技術(shù)”更新推廣應(yīng)用清單附表
- 做有智慧的幼兒教師讀書分享
評(píng)論
0/150
提交評(píng)論