




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)據(jù)結構與算法實驗報告-圖 導讀:就愛閱讀網(wǎng)友為您分享以下“數(shù)據(jù)結構與算法實驗報告-圖”的資訊,希望對您有所幫助,感謝您對的支持! q=(ArcNode *)malloc(sizeof(ArcNode); q-weight=weight; q-adjvex=m1; if(list.vexnoden1.firstArc=NULL) list.vexnoden1.firstArc=q; q-next=NULL; else q-next=list.vexnoden1.firstArc; list.vexnoden1.firstArc=q; printf(鄰接表構造成功nntt鄰接矩陣構造成功!n s
2、ystem( system( void inputMatric() /輸出鄰接矩陣 printf(鄰接矩陣:n printf( for(i=0;i printf( printf( for(i=0;inext) printf( printf( 10 int FirstAdjVex(int i) /返回鄰接表中該弧的第一個節(jié)點指向的位置 int a; if(list.vexnodei.firstArc=NULL) a=-1; else a=list.vexnodei.firstArc-adjvex; / printf(/ return a; int NextAdjVex(int i,int j)
3、/返回第i個頂點的鄰接表中指向j的節(jié)點的后面節(jié)點的指向 int a; for(p=list.vexnodei.firstArc;p!=NULL;p=p-next) if(p-adjvex=j) break; if(p=NULL) return -1; else if(p-next=NULL) return -1; else return p-next-adjvex; void Depth_First_Search() /深度優(yōu)先搜索 11 printf(深度優(yōu)先搜索:n for(i=0;i0;j=NextAdjVex(i,j) if(!visitedj) DFS(visited,j); voi
4、d Breadth_First_Search() /廣度優(yōu)先搜素 printf(廣度優(yōu)先搜素:n for(i=0;i list.visitedi=0; for(i=0;inext) if(!visitedp-adjvex) printf( visitedp-adjvex=1; EnQueue(p-adjvex); 13 沈 陽 工 程 學 院 學 生 實 驗 報 告 (課程名稱: 數(shù)據(jù)結構與算法 ) 圖 實驗題目: 1 一、實驗目的 1掌握圖的基本存儲方法。 2掌握有關圖的操作算法并用高級語言實現(xiàn)。 3熟練掌握圖的兩種搜索路徑的遍歷方法。 4掌握圖的有關應用。 二、實驗環(huán)境 Turbo C或是
5、Visual C+ 三、實驗內容與要求 實驗1 建立無向圖的鄰接矩陣或鄰接表存儲并輸出 本題給出了一個無向圖的鄰接矩陣存儲表示,在此基礎上稍加改動就可以實現(xiàn)有向圖、無向圖和有向網(wǎng)的鄰接矩陣表示。 實驗2 建立圖的鄰接矩陣或鄰接表存儲并在此基礎上實現(xiàn)圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷 圖的廣度優(yōu)先遍歷用非遞歸方法很容易理解,非遞歸方法需要輔助隊列Q以及出隊、入隊函數(shù)。 四、實驗過程及結果分析 1.程序代碼 #include #include #define MAXSIZE 50 typedef struct /鄰接矩陣結構體 int arcsMAXSIZEMAXSIZE; /矩陣數(shù)組 char *v
6、exs; /頂點向量 int vexnum,arcnum; 2 int GraphKind; /圖的種類,1無向圖,2有向圖 Matric; typedef struct ArcNode /鄰接表弧的結構體 int adjvex; /該弧指向定點的位置 int weight; struct ArcNode *next; ArcNode; typedef struct VexNode /鄰接表的數(shù)組節(jié)點 char vex; ArcNode * firstArc; VexNode ; typedef struct /鄰接表的頂點數(shù)組 VexNode *vexnode; int *visited;
7、/儲存是否被檢索過 int vexnum,arcnum; int GraphKind; List; typedef struct QueueNode int local; struct QueueNode *next; 3 QueueNode; typedef struct QueueNode *head; QueueNode *rear; int count; Queue; typedef struct char adjvex; int lowcost; CloseDge; CloseDge *closedge; /*-深度優(yōu)先搜索相關函數(shù)-*/ void Depth_First_Searc
8、h(); /深度優(yōu)先搜索 void DFS(int *visited,int i); int FirstAdjVex(int i); /返回鄰接表中該弧的第一個節(jié)點指向的位置 int NextAdjVex(int i,int j); /返回第i個頂點的鄰接表中指向j的節(jié)點的后面節(jié)點的指向 /*-*/ /*-廣度優(yōu)先搜索相關函數(shù)-*/ void Breadth_First_Search(); /廣度優(yōu)先搜素 void EnQueue(int i); /元素入隊 int DeQueue(); /元素出隊 void inputQueue();/輸出隊列中的元素 4 void BFS(int * vi
9、sited,int i); /*-*/ void create(); /創(chuàng)建鄰接矩陣,鄰接矩陣 void inputMatric();/輸出鄰接矩陣 void inputList();/輸出鄰接表 int mininum(CloseDge *closedge); int i,j,m,n; int weight; char head,rear,m1,n1; Matric matric; List list; Queue queue; QueueNode *temqueuenode; ArcNode *p,*q ; void create() /創(chuàng)建鄰接矩陣 printf(請輸入圖的種類:ntt1
10、.無向圖ntt2.有向圖n fflush(stdin); scanf( list.GraphKind=matric.GraphKind; system( system( printf(請輸入頂點數(shù): fflush(stdin); 5 void BFS(int * visited,int i); /*-*/ void create(); /創(chuàng)建鄰接矩陣,鄰接矩陣 void inputMatric();/輸出鄰接矩陣 void inputList();/輸出鄰接表 int mininum(CloseDge *closedge); int i,j,m,n; int weight; char head
11、,rear,m1,n1; Matric matric; List list; Queue queue; QueueNode *temqueuenode; ArcNode *p,*q ; void create() /創(chuàng)建鄰接矩陣 printf(請輸入圖的種類:ntt1.無向圖ntt2.有向圖n fflush(stdin); scanf( list.GraphKind=matric.GraphKind; system( system( printf(請輸入頂點數(shù): fflush(stdin); 5 scanf( list.vexnum=matric.vexnum; printf(請輸入弧數(shù): f
12、flush(stdin); scanf( list.arcnum=matric.arcnum; queue.count=0; queue.head=NULL; queue.rear=NULL; matric.vexs=(char *)malloc(sizeof(char)*(matric.vexnum); list.vexnode=(VexNode *)malloc(sizeof(VexNode)*matric.vexnum); list.visited=(int *)malloc(sizeof(int)*list.vexnum); for(i=0;i printf(請輸入第%d個頂點: ff
13、lush(stdin); scanf( list.vexnodei.vex=matric.vexsi; printf(頂點集輸入成功!n system( system( printf(請輸入弧集(輸入模式:“弧頭,弧尾,權值”,若為無權圖,則權值均輸入”1“):n for(i=0;i if(head=matric.vexsm) m1=m; for(n=0;nweight=weight; p-adjvex=n1; if(list.vexnodem1.firstArc=NULL) list.vexnodem1.firstArc=p; p-next=NULL; else p-next=list.ve
14、xnodem1.firstArc; list.vexnodem1.firstArc=p; if(matric.GraphKind=1) matric.arcsn1m1=weight; 8 q=(ArcNode *)malloc(sizeof(ArcNode); q-weight=weight; q-adjvex=m1; if(list.vexnoden1.firstArc=NULL) list.vexnoden1.firstArc=q; q-next=NULL; else q-next=list.vexnoden1.firstArc; list.vexnoden1.firstArc=q; pr
15、intf(鄰接表構造成功nntt鄰接矩陣構造成功!n system( system( void inputMatric() /輸出鄰接矩陣 printf(鄰接矩陣:n printf( for(i=0;i list.visitedi=0; for(i=0;inext) if(!visitedp-adjvex) printf( visitedp-adjvex=1; EnQueue(p-adjvex); 13 if(queue.count!=0) BFS(visited,DeQueue(); void EnQueue(int i) /元素入隊 temqueuenode=(QueueNode *)ma
16、lloc(sizeof(QueueNode); temqueuenode-local=i; if(queue.count=0) queue.head=temqueuenode; queue.rear=temqueuenode; temqueuenode-next=NULL; queue.count+; else queue.rear-next=temqueuenode; queue.rear=temqueuenode; queue.count+; /printf(元素%c入隊成功!n /inputQueue(); int DeQueue() /元素出隊 14 if(queue.count=0)
17、 printf(隊列為空!無法完成輸出操作!n else temqueuenode=queue.head; queue.head=queue.head-next; queue.count-; /printf(元素%c出隊成功!n /inputQueue(); return temqueuenode-local; void inputQueue() for(i=0,temqueuenode=queue.head;inext) printf(隊列中第%d個元素:%cn 15 int main() create(); inputMatric(); printf( system( system( inputList(); printf( system( system( Depth_First_Search(); printf( system( system( Breadth_First_Search(); printf( system( return 0; 2.程序運行分析 (1)主菜單 16 圖1 主菜單 (2) 初始化鄰接表與鄰接矩陣 圖 2 初始化鄰接表與鄰接矩陣 17 圖1 主菜單 (2) 初始化鄰接表與鄰接矩陣 圖 2 初始化鄰接表與鄰接矩陣 17 (3)輸入頂點集 圖 3 輸入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級上冊數(shù)學教案-分數(shù)的再認識 北師大版
- 六年級下冊數(shù)學教案 用不同的知識解答應用題 西師大版
- 二年級下冊數(shù)學教案-5.2 被減數(shù)中間有0的連續(xù)退位減法| 青島版(五四學制)
- 口腔門診勞動合同(2025年版)
- 一年級下冊數(shù)學教案-動手做(一)2 北師大版
- 六年級下冊數(shù)學教案-總復習-四則運算的意義和法則|北師大版
- 三年級上冊數(shù)學教案-用兩步連乘解決實際問題∣蘇教版
- 2024年張緊裝置項目資金申請報告代可行性研究報告
- 2025年華北理工大學輕工學院單招職業(yè)傾向性測試題庫帶答案
- 數(shù)學-廣州市白云區(qū)2025年高三下學期期初綜合訓練試題+答案
- 部編版小學五年級語文教材培訓課件【部編】
- 盆景造型經(jīng)驗
- 2023年廣東省佛山市順德區(qū)小升初數(shù)學試卷(含答案)
- ICU護理查房記錄【范本模板】
- 威風堂堂進行曲
- 銅及銅合金物理冶金基礎-黃銅
- 煤礦信息化管理制度
- 金融科技學-完整全套課件
- 物理學史中國古代物理學
- 導管滑脫應急預案演練住院患者導尿管道滑脫
- (完整)小學語文考試專用作文方格紙
評論
0/150
提交評論