




已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.實(shí)驗(yàn)項(xiàng)目名稱: 圖的遍歷 一、實(shí)驗(yàn)?zāi)康?應(yīng)用所學(xué)的知識(shí)分析問(wèn)題、解決問(wèn)題,學(xué)會(huì)用建立圖并對(duì)其進(jìn)行遍歷,提高實(shí)際編程能力及程序調(diào)試能力。二、實(shí)驗(yàn)內(nèi)容 問(wèn)題描述:建立有向圖,并用深度優(yōu)先搜索和廣度優(yōu)先搜素。輸入圖中節(jié)點(diǎn)的個(gè)數(shù)和邊的個(gè)數(shù),能夠打印出用鄰接表或鄰接矩陣表示的圖的儲(chǔ)存結(jié)構(gòu)。三、實(shí)驗(yàn)儀器與設(shè)備 計(jì)算機(jī),Code:Blocks。四、實(shí)驗(yàn)原理 用鄰接表存儲(chǔ)一個(gè)圖,遞歸方法深度搜索和用隊(duì)列進(jìn)行廣度搜索,并輸出遍歷的結(jié)果。5、 實(shí)驗(yàn)程序及結(jié)果#define INFINITY 10000 /*無(wú)窮大*/#define MAX_VERTEX_NUM 40#define MAX 40#include#include#include#includetypedef struct ArCellint adj; ArCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct char name20; infotype;typedef struct infotype vexsMAX_VERTEX_NUM;AdjMatrix arcs;int vexnum,arcnum;MGraph;int LocateVex(MGraph *G,char* v) int c = -1,i;for(i=0;ivexnum;i+)if(strcmp(v,G-)=0) c=i; break;return c;MGraph * CreatUDN(MGraph *G)/初始化圖,接受用戶輸入int i,j,k,w;char v120,v220;printf(請(qǐng)輸入圖的頂點(diǎn)數(shù),弧數(shù):);scanf(%d%d,&G-vexnum,&G-arcnum);printf(結(jié)點(diǎn)名字:n);for(i=0;ivexnum;i+)printf(No.%d:,i+1);scanf(%s,G-);for(i=0;ivexnum;i+)for(j=0;jvexnum;j+)G-arcsij.adj=INFINITY;printf(請(qǐng)輸入一條邊依附的兩個(gè)頂點(diǎn)和權(quán)值:n);for(k=0;karcnum;k+)printf(第%d條邊:n,k+1); printf(起始結(jié)點(diǎn):);scanf(%s,v1); printf(結(jié)束結(jié)點(diǎn):);scanf(%s,v2); /printf(邊的權(quán)值:); /scanf(%d,&w);i=LocateVex(G,v1); j=LocateVex(G,v2);if(i=0&j=0)/G-arcsij.adj=w;G-arcsji=G-arcsij;return G;int FirstAdjVex(MGraph *G,int v)int i;if(v=0 & vvexnum) /v合理for(i=0;ivexnum;i+)if(G-arcsvi.adj!=INFINITY)return i;return -1;void VisitFunc(MGraph *G,int v)printf(%s ,G-);int NextAdjVex(MGraph *G,int v,int w)int k;if(v=0 & vvexnum & w=0 & wvexnum)/v,w合理for( k=w+1;kvexnum;k+)if(G-arcsvk.adj!=INFINITY)return k;return -1;int visitedMAX;void DFS(MGraph *G,int v)/從第v個(gè)頂點(diǎn)出發(fā)遞歸地深度優(yōu)先遍歷圖Gint w;visitedv=1;VisitFunc(G,v);/訪問(wèn)第v個(gè)結(jié)點(diǎn)for(w=FirstAdjVex(G,v);w=0;w=NextAdjVex(G,v,w)if(!visitedw)DFS(G,w);printf(%d ,G-arcsvw);void DFSTraverse(MGraph *G,char *s)/深度優(yōu)先遍歷int v,k;for(v=0;vvexnum;v+)visitedv=0;k=LocateVex(G,s);if(k=0&kvexnum)for(v=k;v=0;v-)if(!visitedv)DFS(G,v);for(v=k+1;vvexnum;v+)if(!visitedv)DFS(G,v);typedef struct Qnodeint vexnum;struct Qnode *next;QNode,*QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;int InitQueue(LinkQueue *Q)Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode);if(!Q-front)exit(0);Q-front-next=NULL;return 1;void EnQueue(LinkQueue *Q,int a )QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);if(!p)exit(0);p-vexnum=a;p-next=NULL;Q-rear-next=p;Q-rear=p;int DeQueue(LinkQueue *Q,int *v) QueuePtr p;if(Q-front=Q-rear)printf(結(jié)點(diǎn)不存在!n);exit(0);p=Q-front-next;*v=p-vexnum;Q-front-next=p-next;if(Q-rear=p)Q-front=Q-rear;return *v;int QueueEmpty(LinkQueue *Q)if(Q-rear=Q-front)return 0;return 1;int VisitedMAX;void BFSTraverse(MGraph *G,char *str)/廣度優(yōu)先遍歷int w,u,v,k;LinkQueue Q,q;for(v=0;vvexnum;v+) Visitedv=0;InitQueue(&Q);InitQueue(&q);k=LocateVex(G,str);for(v=k;v=0;v-)if(!Visitedv)Visitedv=1;VisitFunc(G,v);EnQueue(&Q,v);/v入隊(duì)while(!QueueEmpty(&Q)DeQueue(&Q,&u);/出隊(duì)for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)if(!Visitedw)Visitedw=1;VisitFunc(G,v);EnQueue(&Q,w);for(v=k+1;vvexnum;v+)if(!Visitedv)Visitedv=1;VisitFunc(G,v);EnQueue(&Q,v);/v入隊(duì)while(!QueueEmpty(&Q)DeQueue(&Q,&u);/出隊(duì)for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)if(!Visitedw)Visitedw=1;VisitFunc(G,v);EnQueue(&Q,w);void main()MGraph *G,b;char v10;G=CreatUDN(&b);printf(請(qǐng)輸入起始結(jié)點(diǎn)名稱:);scanf(%s,v);printf(n深度優(yōu)先遍歷:n);DFSTraverse(G,v);printf(n廣度優(yōu)先遍歷:n);BFSTraverse(G,v);getch();6、 實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)要求輸入圖中節(jié)點(diǎn)的個(gè)數(shù)和邊的個(gè)數(shù),能夠打印出用鄰接表或鄰接矩陣表示的圖的儲(chǔ)存結(jié)構(gòu)。在設(shè)計(jì)中其中用鄰接表表示的節(jié)點(diǎn)的值只能是數(shù)字,但用鄰接矩陣表示的節(jié)點(diǎn)的值可以是字母。但用鄰接表形式要相對(duì)簡(jiǎn)單一些。深度優(yōu)先采取的遞歸思想。首先,將從起點(diǎn),沿某條邊,順勢(shì)遍歷下去,直到不能繼續(xù)遍歷下去。這時(shí),又從起點(diǎn)的另一結(jié)點(diǎn)開(kāi)始,遍歷下去。如
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能視角下的認(rèn)知科學(xué)研究
- 智慧林業(yè)推動(dòng)林業(yè)新質(zhì)生產(chǎn)力的內(nèi)在機(jī)制與發(fā)展路徑研究
- 公平原則下個(gè)人信息同意機(jī)制的法律經(jīng)濟(jì)學(xué)分析
- 勞動(dòng)力市場(chǎng)扭曲的成因機(jī)制及其影響效應(yīng)研究與對(duì)策探討
- 高中物理案例教學(xué)科學(xué)思維培養(yǎng)
- 橋頭飯?zhí)霉芾磙k法細(xì)則
- 幼兒園衛(wèi)生保健人才隊(duì)伍建設(shè)與培訓(xùn)體系
- 大氣光學(xué)湍流廓線的探測(cè)與預(yù)測(cè)技術(shù)研究
- 昭通盆景栽培管理辦法
- 國(guó)家安全學(xué)習(xí)體會(huì)
- GB/T 307.4-2017滾動(dòng)軸承推力軸承 產(chǎn)品幾何技術(shù)規(guī)范(GPS)和公差值
- GB 29415-2013耐火電纜槽盒
- 《密碼法》培訓(xùn)只是講座PPT課件(帶內(nèi)容)
- 建筑工程文件歸檔管理明細(xì)表
- 如何解讀血常規(guī)報(bào)告
- 區(qū)域消防安全風(fēng)險(xiǎn)評(píng)估規(guī)程DB50-T 1114-2021
- 免疫調(diào)節(jié)治療在腦卒中的運(yùn)用課件
- 機(jī)關(guān)檔案管理工作培訓(xùn)PPT課件
- 25T汽車吊檢驗(yàn)報(bào)告
- 變頻空調(diào)中的永磁電機(jī)電感分析
- 高考??颊Z(yǔ)法填空詞性轉(zhuǎn)換匯總
評(píng)論
0/150
提交評(píng)論