數(shù)據(jù)結構圖實驗報告_第1頁
數(shù)據(jù)結構圖實驗報告_第2頁
數(shù)據(jù)結構圖實驗報告_第3頁
數(shù)據(jù)結構圖實驗報告_第4頁
數(shù)據(jù)結構圖實驗報告_第5頁
免費預覽已結束,剩余17頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

數(shù)據(jù)結構圖實驗報告數(shù)據(jù)結構圖實驗報告數(shù)據(jù)結構圖實驗報告xxx公司數(shù)據(jù)結構圖實驗報告文件編號:文件日期:修訂次數(shù):第1.0次更改批準審核制定方案設計,管理制度一、實驗目的和要求(1)掌握圖的相關概念,包括圖,有向圖,無向圖,完全圖,子圖,連通圖,度,入度,出度,簡單回路和環(huán)等定義。(2)重點掌握圖的各種存儲結構,包括鄰接矩陣和鄰接表等。(3)重點掌握圖的基本運算,包括創(chuàng)建圖,輸出圖,深度優(yōu)先遍歷,廣度優(yōu)先遍歷等。(4)掌握圖的其他運算,包括最小生成樹,最短路徑,拓撲排序和關鍵路徑等算法。(5)靈活運用圖這種數(shù)據(jù)結構解決一些綜合應用問題。二、實驗內(nèi)容和方法(1)實驗內(nèi)容:1、編寫一個程序,實現(xiàn)不帶權圖和帶權圖的鄰接矩陣與鄰接表的相互轉換算法、輸出鄰接矩陣與鄰接表的算法,并在此基礎上設計一個程序實現(xiàn)如下功能:①建立如圖1所示的有向圖G的鄰接矩陣,并輸出;②由有向圖G的鄰接矩陣產(chǎn)生鄰接表,并輸出;③再由②的鄰接表產(chǎn)生對應的鄰接矩陣,并輸出。11569758453015243圖12、編寫一個程序,實現(xiàn)圖的遍歷運算,并在此基礎上設計一個程序完成如下功能:①輸出圖1所示的有向圖G從頂點0開始的深度優(yōu)先遍歷序列(遞歸算法);②輸出圖1所示的有向圖G從頂點0開始的深度優(yōu)先遍歷序列(非遞歸算法);③輸出圖1所示的有向圖G從頂點0開始的廣度優(yōu)先遍歷序列。3、設計一個程序,采用鄰接表存儲圖,并輸出圖(a)中從指定頂點1出發(fā)的所有深度優(yōu)先遍歷序列。(2)實驗方法:1、綜合運用課本所學的知識,用不同的算法實現(xiàn)在不同的程序功能。2、結合指導老師的指導,解決程序中的問題,正確解決實際中存在的異常情況,逐步改善功能。3、根據(jù)實驗內(nèi)容,編譯程序。三、實驗環(huán)境:Windows7,VisualC++三、實驗過程描述文件中定義了圖的鄰接矩陣表示類型和鄰接表表示類型,該頭文件在以下三個實驗中都會使用到。其代碼如下:#ifndefGRAPH_H_INCLUDED#ifndefGRAPH_H_INCLUDED#defineGRAPH_H_INCLUDEDtypedefintInfoType;#defineMAXV100//最大頂點個數(shù)#defineINF32767//INF表示無限大//以下定義鄰接矩陣類型typedefstruct{intno;InfoTypeinfo;}VertexType;typedefstruct{intedges[MAXV][MAXV];intn,e;VertexTypevexs[MAXV];}MGraph;//以下定義鄰接表類型typedefstructANode{intadjvex;structANode*nextarc;InfoTypeinfo;}ArcNode;typedefintVertex;typedefstructVNode{Vertexdata;ArcNode*firstarc;}VNode;typedefVNodeAdjList[MAXV];typedefstruct{AdjListadjlist;intn,e;}ALGraph;#endif//GRAPH_H_INCLUDEDVertexTypevexs[MAXV];VertexTypevexs[MAXV];}MGraph;//以下定義鄰接表類型typedefstructANode{intadjvex;structANode*nextarc;InfoTypeinfo;}ArcNode;typedefintVertex;typedefstructVNode{Vertexdata;ArcNode*firstarc;}VNode;typedefVNodeAdjList[MAXV];typedefstruct{AdjListadjlist;intn,e;}ALGraph;#endif//GRAPH_H_INCLUDED實驗①源程序。一、輸入如下所示程序;//文件名://文件名:#include<>#include<>#include""externvoidMatToList1(MGraph,ALGraph*&);externvoidListToMat1(ALGraph*,MGraph&);externvoidDispMat1(MGraph);externvoidDispAdj1(ALGraph*);intmain()intmain(){inti,j;MGraphg,g1;ALGraph*G;intA[MAXV][6]={{0,5,INF,7,INF,INF},{INF,0,4,INF,INF,INF},{8,INF,0,INF,INF,9},{INF,INF,5,0,INF,6},{INF,INF,INF,5,0,INF},{3,INF,INF,INF,1,0}};=6;=10;for(i=0;i<;i++)for(j=0;j<;j++)[i][j]=A[i][j];printf("有向圖G的鄰接矩陣:\n");DispMat1(g);G=(ALGraph*)malloc(sizeof(ALGraph));printf("圖G的鄰接矩陣轉換成鄰接表:\n");MatToList1(g,G);DispAdj1(G);printf("圖G的鄰接表轉換成鄰接矩陣:\n");ListToMat1(G,g1);DispMat1(g1);return0;}//文件名://文件名:#include<>#include<>#include""http://不帶權圖的算法voidMatToList(MGraphg,ALGraph*&G){inti,j;ArcNode*p;G=(ALGraph*)malloc(sizeof(ALGraph));for(i=0;i<;i++)for(j=;j>=0;j--)if[i][j]!=0)if[i][j]!=0){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G->adjlist[i].firstarc;G->adjlist[i].firstarc=p;}G->n=;G->e=;}voidListToMat(ALGraph*G,MGraph&g){inti,j;ArcNode*p;for(i=0;i<G->n;i++)for(j=0;j<G->n;j++)[i][j]=0;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;while(p!=NULL){[i][p->adjvex]=1;p=p->nextarc;}}=G->n;=G->e;}voidDispMat(MGraphg){inti,j;for(i=0;i<;i++){for(j=0;j<;j++)printf("%3d",[i][j]);printf("\n");}}voidDispAdj(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d",p->adjvex);p=p->nextarc;}printf("\n");}}irstarc=NULL;for(i=0;i<;i++)for(j=;j>=0;j--)if[i][j]!=0&&[i][j]!=INF){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=[i][j];p->nextarc=G->adjlist[i].firstarc;G->adjlist[i].firstarc=p;}G->n=;G->e=;}voidListToMat1(ALGraph*G,MGraph&g){inti,j;ArcNode*p;for(i=0;i<G->n;i++)for(j=0;j<G->n;j++)if(i==j)[i][j]=0;else[i][j]=INF;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;while(p!=NULL){[i][p->adjvex]=p->info;p=p->nextarc;}}=G->n;=G->e;}voidDispMat1(MGraphg){inti,j;for(i=0;i<;i++){for(j=0;j<;j++)if[i][j]==INF)printf("%3s","∞");elseprintf("%3d",[i][j]);printf("\n");}}voidDispAdj1(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d(%d)",p->adjvex,p->info);p=p->nextarc;}printf("\n");}}voidDispAdj1(ALGraph*G)voidDispAdj1(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d(%d)",p->adjvex,p->info);p=p->nextarc;}printf("\n");}}二、編譯并鏈接程序;三、運行程序,結果如下圖:實驗eq\o\ac(○,2)源程序一、輸入如下所示程序;//文件名://文件名:#include<>#include<>#include""externvoidMatToList1(MGraph,ALGraph*&);externvoidDispAdj1(ALGraph*G);externvoidDFS(ALGraph*G,intv);externvoidDFS1(ALGraph*G,intv);externvoidDFS2(ALGraph*G,intv);externvoidBFS(ALGraph*G,intv);intmain(){inti,j;MGraphg;ALGraph*G;intA[MAXV][6]={{0,5,INF,7,INF,INF},{INF,0,4,INF,INF,INF},{8,INF,0,INF,INF,9},{INF,INF,5,0,INF,6},{INF,INF,INF,5,0,INF},{3,INF,INF,INF,1,0}};=6;=10;for(i=0;i<;i++)for(j=0;j<;j++)[i][j]=A[i][j];G=(ALGraph*)malloc(sizeof(ALGraph));MatToList1(g,G);printf("圖G的鄰接表:\n");DispAdj1(G);printf("從頂點0開始的DFS(遞歸算法):\n");DFS(G,0);printf("\n");printf("從頂點0開始的DFS(非遞歸算法):\n");DFS1(G,0);printf("\n");printf("從頂點0開始的BFS:\n");BFS(G,0);printf("\n");returne0;}irstarirstarc;while(p!=NULL){if(visited[p->adjvex]==0)DFS(G,p->adjvex);p=p->nextarc;}}voidDFS1(ALGraph*G,intv)irstarc;while(top>-1){p=St[top];top--;while(p!=NULL){w=p->adjvex;if(visited[w]==0){printf("%3d",w);visited[w]=1;top++;St[top]=G->adjlist[w].firstarc;break;}p=p->nextarc;}}printf("\n");}voidBFS(ALGraph*G,intv){ArcNode*p;intqueue[MAXV],front=0,rear=0;intvisited[MAXV];intw,i;for(i=0;i<G->n;i++)visited[i]=0;printf("%3d",v);visited[v]=1;rear=(rear+1)%MAXV;queue[rear]=v;while(front!=rear){front=(front+1)%MAXV;w=queue[front];p=G->adjlist[w].firstarc;while(p!=NULL){if(visited[p->adjvex]==0){printf("%3d",p->adjvex);visited[p->adjvex]=1;rear=(rear+1)%MAXV;queue[rear]=p->adjvex;}p=p->nextarc;}}printf("\n");}voidMatToList1(MGraphg,ALGraph*&G){inti,j;ArcNode*p;G=(ALGraph*)malloc(sizeof(ALGraph));for(i=0;i<;i++)G->adjlist[i].firstarc=NULL;for(i=0;i<;i++)for(j=;j>=0;j--)if[i][j]!=0&&[i][j]!=INF){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=[i][j];p->nextarc=G->adjlist[i].firstarc;G->adjlist[i].firstarc=p;}G->n=;G->e=;}voidDispAdj1(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d(%d)",p->adjvex,p->info);p=p->nextarc;}printf("\n");}}top++;top++;St[top]=G->adjlist[w].firstarc;break;}p=p->nextarc;}}printf("\n");}voidBFS(ALGraph*G,intv){ArcNode*p;intqueue[MAXV],front=0,rear=0;intvisited[MAXV];intw,i;for(i=0;i<G->n;i++)visited[i]=0;printf("%3d",v);visited[v]=1;rear=(rear+1)%MAXV;queue[rear]=v;while(front!=rear){front=(front+1)%MAXV;w=queue[front];p=G->adjlist[w].firstarc;while(p!=NULL){if(visited[p->adjvex]==0){printf("%3d",p->adjvex);visited[p->adjvex]=1;rear=(rear+1)%MAXV;queue[rear]=p->adjvex;}p=p->nextarc;}}printf("\n");}voidMatToList1(MGraphg,ALGraph*&G){inti,j;ArcNode*p;G=(ALGraph*)malloc(sizeof(ALGraph));for(i=0;i<;i++)G->adjlist[i].firstarc=NULL;for(i=0;i<;i++)for(j=;j>=0;j--)if[i][j]!=0&&[i][j]!=INF){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=[i][j];p->nextarc=G->adjlist[i].firstarc;G->adjlist[i].firstarc=p;}G->n=;G->e=;}voidDispAdj1(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d(%d)",p->adjvex,p->info);p=p->nextarc;}printf("\n");}}voidMatToList1(MGraphg,ALGraph*&G)voidMatToList1(MGraphg,ALGraph*&G){inti,j;ArcNode*p;G=(ALGraph*)malloc(sizeof(ALGraph));for(i=0;i<;i++)G->adjlist[i].firstarc=NULL;for(i=0;i<;i++)for(j=;j>=0;j--)if[i][j]!=0&&[i][j]!=INF){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=[i][j];p->nextarc=G->adjlist[i].firstarc;G->adjlist[i].firstarc=p;}G->n=;G->e=;}voidDispAdj1(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d(%d)",p->adjvex,p->info);p=p->nextarc;}printf("\n");}}二、對程序進行編譯鏈接;三、運行該程序,結果如圖實驗③源程序。一、輸入如下所示程序;#include<>#include<>#include<>#include""externvoidMatToList(MGraph,ALGraph*&);externvoidDispAdj(ALGraph*);intvisited[MAXV];voidDFSALL(ALGraph*G,intv,intpath[],intd){ArcNode*p;visited[v]=1;path[d]=v;d++;if(d==G->n){for(intk=0;k<d;k++)printf("%2d",path[k]);printf("\n");}p=G->adjlist[v].firstarc;while(p!=NULL){if(visited[p->adjvex]==0)DFSALL(G,p->adjvex,path,d);p=p->nextarc;}visited[v]=0;}intmain(){intpath[MAXV],i,j,v=1;MGraphg;ALGraph*G;=5;=8;intA[MAXV][MAXV]={{0,1,0,1,1},{1,0,1,1,0},{0,1,0,1,1},{1,1,1,0,1},{1,0,1,1,0}};for(i=0;i<;i++)for(j=0;j<;j++)[i][j]=A[i][j];MatToList(g,G);for(i=0;i<;i++)visited[i]=0;printf("圖G的鄰接表:\n");DispAdj(G);printf("從頂點%d出發(fā)的所有深度優(yōu)先序列:\n",v);DFSALL(G,v,path,0);printf("\n");return0;}voidMatToList(MGraphg,ALGraph*&G){inti,j;ArcNode*p;G=(ALGraph*)malloc(sizeof(ALGraph));for(i=0;i<;i++)G->adjlist[i].firstarc=NULL;for(i=0;i<;i++)for(j=;j>=0;j--)if[i][j]!=0){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->nextarc=G->adjlist[i].firstarc;G->adjlist[i].firstarc=p;}G->n=;G->e=;}voidDispAdj(ALGraph*G){inti;ArcNode*p;for(i=0;i<G->n;i++){p=G->adjlist[i].firstarc;printf("%3d:",i);while(p!=NULL){printf("%3d",p->adjvex);p=p->nextarc;}printf("\n");}}if(visited[p->adjvex]==0)if(visited[p->adjvex]==0)DFSALL(G,p->adjvex,path,d);p=p->nextarc;}visited[v]=0;}intmain(){intpath[MAXV],i,j,v=1;MGraphg;ALGraph*G;=5;=8;intA[MAXV][MAXV]={{0,1,0,1,1},{1,0,1,1,0},{0,1,0,1,1},{1,1,1,0,1},{1,0,1,1,0}};for(i=0;i<;i++)for(j=0;j<;j++)[i][j]=A[i][j];MatToList(g,G);for(i=0;i<;i+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論