版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、浙江大學(xué)城市學(xué)院實(shí)驗(yàn)報(bào)告課程名稱 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ) 實(shí)驗(yàn)項(xiàng)目名稱 實(shí)驗(yàn)十二 圖的基本操作鄰接矩陣存儲(chǔ)結(jié)構(gòu) 學(xué)生姓名 專業(yè)班級(jí) 學(xué)號(hào) 實(shí)驗(yàn)成績(jī) 指導(dǎo)老師(簽名 ) 日期 一. 實(shí)驗(yàn)?zāi)康暮鸵?、掌握?qǐng)D的存儲(chǔ)結(jié)構(gòu):鄰接矩陣。2、學(xué)會(huì)對(duì)圖的存儲(chǔ)結(jié)構(gòu)進(jìn)行基本操作。二. 實(shí)驗(yàn)內(nèi)容1、圖的鄰接矩陣定義及實(shí)現(xiàn):建立頭文件adjmatrix.h,在該文件中定義圖的鄰接矩陣存儲(chǔ)結(jié)構(gòu),并編寫圖的初始化、建立圖、輸出圖、輸出圖的每個(gè)頂點(diǎn)的度等基本操作實(shí)現(xiàn)函數(shù)。同時(shí)建立一個(gè)驗(yàn)證操作實(shí)現(xiàn)的主函數(shù)文件test5_1.cpp,編譯并調(diào)試程序,直到正確運(yùn)行。 2、選做:編寫圖的深度優(yōu)先遍歷函數(shù)與廣度優(yōu)先遍歷函數(shù),要求把這兩個(gè)函數(shù)
2、添加到頭文件adjmatrix.h中,并在主函數(shù)文件test5_1.cpp中添加相應(yīng)語句進(jìn)行測(cè)試。3、填寫實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)報(bào)告文件取名為report12.doc。4、上傳實(shí)驗(yàn)報(bào)告文件report12.doc及源程序文件test5_1.cpp、adjmatrix.h到ftp服務(wù)器上自己的文件夾下。三. 函數(shù)的功能說明及算法思路 (包括每個(gè)函數(shù)的功能說明,及一些重要函數(shù)的算法實(shí)現(xiàn)思路)鄰接矩陣表示法的c語言描述:typedef structvexlist vexs; /頂點(diǎn)數(shù)據(jù)元素adjmatrix ga; /二維數(shù)組作鄰接矩陣int n; /頂點(diǎn)數(shù)int k1,k2; /k1為有無向,k2為有無權(quán)
3、graph;const int maxvertexnum = 10; /*圖的最大頂點(diǎn)數(shù)*/const int maxedgenum = 100; /*圖的最大邊數(shù)*/const int maxvalue = 10000; /*無窮大的具體值*/typedef int weighttype; /*定義權(quán)的類型*/typedef char vertextype;typedef vertextype vexlistmaxvertexnum; /*定義頂點(diǎn)數(shù)組類型*/typedef int adjmatrixmaxvertexnummaxvertexnum; /*定義鄰接矩陣類型*/抽象數(shù)據(jù)類型:a
4、dt graph is data: graph(v, e ) 其中: v = vi | 0=i=0, vi vertextype 是頂點(diǎn)的有窮集合; e = (x, y) | x, y v 或 e = | x, y v 是頂點(diǎn)之間關(guān)系的有窮集合,也叫做邊集合。 存儲(chǔ)類型用adjmatrix表示 operations: void initmatrix( adjmatrix ga, int k)/初始化算法(假設(shè)頂點(diǎn)信息僅是序號(hào)) void creatematrix( adjmatrix ga, int n, char *s, int k1, int k2)/建立圖的鄰接矩陣算法 void pri
5、ntmatrix( adjmatrix ga, int n, int k1, int k2)/根據(jù)圖的鄰接矩陣輸出圖的頂點(diǎn)集和邊集 void printdegree(vexlist v,adjmatrix ga,int n,int k1)/計(jì)算各個(gè)頂點(diǎn)的度 void dfsmatrix(adjmatrix ga,int i,int n,bool *visited)/深度優(yōu)先遍歷 void bfsmatrix( adjmatrix ga,int i,int n,bool *visited)/廣度優(yōu)先遍歷end度的算法:void printdegree(vexlist v,adjmatrix ga
6、,int n,int k1)數(shù)組vi存放所有頂點(diǎn),根據(jù)邊結(jié)點(diǎn)的指針數(shù)組計(jì)算該結(jié)點(diǎn)的度;若圖是有向圖,則查找所有邊結(jié)點(diǎn)的鄰接點(diǎn)域,如果是當(dāng)前結(jié)點(diǎn)的位置,就將該結(jié)點(diǎn)對(duì)應(yīng)的度+1。隊(duì)列:typedef char elemtype;struct queueelemtype *queue;int front,rear;int maxsize;operations:void initqueue(queue &q) /初始化循環(huán)隊(duì)列qint emptyqueue(queue q)/判斷隊(duì)列是否為空,空返回1,否則返回0void enqueue(queue &q,elemtype item)/ 入隊(duì)列elem
7、type outqueue(queue &q) / 出隊(duì)列end queue四. 實(shí)驗(yàn)結(jié)果與分析(包括運(yùn)行結(jié)果截圖、結(jié)果分析等)無向無權(quán)圖:無向有權(quán)圖:有向無權(quán)圖:有向有權(quán)圖:五. 心得體會(huì)(記錄實(shí)驗(yàn)感受、上機(jī)過程中遇到的困難及解決辦法、遺留的問題、意見和建議等。)在計(jì)算度的編程上出現(xiàn)了問題,計(jì)算void printdegree(vexlist v,adjmatrix ga,int n,int k1)時(shí),vi是存放頂點(diǎn)的數(shù)組,但是在main()函數(shù)里面忘記使用數(shù)組,結(jié)果編譯是正確的但是輸出來是一堆亂碼。最后改了好久才想起來,在前面加上cout請(qǐng)輸入圖的頂點(diǎn)集合(如:abc)endl;for(i
8、=0; ig.vexsi;【附錄-源程序】test5_1.cpp:#include#include#include#include#includeconst int maxvertexnum = 10; /*圖的最大頂點(diǎn)數(shù)*/const int maxedgenum = 100; /*圖的最大邊數(shù)*/const int maxvalue = 10000; /*無窮大的具體值*/typedef int weighttype; /*定義權(quán)的類型*/typedef char vertextype;typedef vertextype vexlistmaxvertexnum; /*定義頂點(diǎn)數(shù)組類型*/
9、typedef int adjmatrixmaxvertexnummaxvertexnum; /*定義鄰接矩陣類型*/#include adjmatrix.h void main()graph g;/鄰接矩陣int i;coutg.n;cout請(qǐng)輸入圖的頂點(diǎn)集合(如:abc)endl;for(i=0; ig.vexsi;coutg.k1g.k2;bool *visited=new boolg.n; /定義并動(dòng)態(tài)分配標(biāo)志數(shù)組initmatrix(g.ga,g.k2);couta;creatematrix(g.ga,g.n,a,g.k1,g.k2);printdegree(g.vexs,g.ga,
10、g.n,g.k1);cout按圖的鄰接矩陣得到的深度優(yōu)先遍歷序列:endl;for(i=0;ig.n;i+) visitedi=false;dfsmatrix(g.ga,0,g.n,visited);coutendl;cout按圖的鄰接矩陣得到的廣度優(yōu)先遍歷序列:endl;for(i=0;ig.n;i+) visitedi=false;bfsmatrix(g.ga,0,g.n,visited);coutendl;printmatrix(g.ga,g.n,g.k1,g.k2);adjmatrix.htypedef structvexlist vexs; /頂點(diǎn)數(shù)據(jù)元素adjmatrix ga;
11、/二維數(shù)組作鄰接矩陣int n; /頂點(diǎn)數(shù)int k1,k2; /k1為有無向,k2為有無權(quán)graph;void initmatrix( adjmatrix ga, int k)/初始化算法 (假設(shè)頂點(diǎn)信息僅是序號(hào))/k=0代表無權(quán)圖,k0代表帶權(quán)圖int i, j;for( i=0; imaxvertexnum; i+)for( j=0; jc1; /讀入第一個(gè)字符 if(k1=0 & k2=0) /建立無向無權(quán)圖dosinc1ic2jc3; /讀入一條邊,如 (2,5) gaij = gaji = 1; /相應(yīng)的邊元素置1 sinc1; /讀入, 或 if (c1=) break;whil
12、e (1);else if (k1=0 & k2!=0) /建立無向帶權(quán)圖dosinc1ic2jc3w; /讀入一條邊,如 (2,5)8gaij = gaji = w;sinc1;if (c1=) break;while(1);else if (k1!=0 & k2=0) /建立有向無權(quán)圖do sinc1ic2jc3;gaij = 1; sinc1;if (c1=) break;while(1);else if (k1!=0 & k2!=0) /建立有向帶權(quán)圖do sinc1ic2jc3w;gaij = w;sinc1;if (c1=) break;while(1);void printmat
13、rix( adjmatrix ga, int n, int k1, int k2)/根據(jù)圖的鄰接矩陣輸出圖的頂點(diǎn)集和邊集/ k1=0 代表無向圖否則為有向圖, k2 =0 代表無權(quán)圖否則為帶權(quán)圖int i, j;cout v=; /準(zhǔn)備輸出頂點(diǎn)集for(i=0; in-1; i+)couti,;coutn-1endl;cout e=; /準(zhǔn)備輸出邊集if(k2=0) /無權(quán)圖 for(i=0; in; i+)for(j=0; jn; j+)if( gaij =1 )if(k1=0) /無向圖if(ij)cout(i,j),;else /有向圖couti,j,;else /帶權(quán)圖 for(i=0
14、; in; i+)for(j=0; jn; j+)if(gaij != 0 & gaij != maxvalue )if(k1=0) /無向圖if(ij)cout(i,j)gaij,;else /有向圖couti,j gaij,;coutendl; void printdegree(vexlist v,adjmatrix ga,int n,int k1)/計(jì)算各個(gè)頂點(diǎn)的度int i,j,d;for(i=0;in;i+)d=0;for(j=0;jn;j+)if(gaij!=0&gaij!=maxvalue)d+;if(k1) /有向圖for(j=0;jn;j+)if(gaji!=0&gaji!=
15、maxvalue)d+;coutvi的度為dendl;/*=選作部分=*/typedef char elemtype;struct queueelemtype *queue;int front,rear;int maxsize;void initqueue(queue &q) /初始化循環(huán)隊(duì)列qq.maxsize=10;q.queue=(elemtype *)malloc(sizeof(elemtype)*q.maxsize);q.rear=q.front=0;int emptyqueue(queue q)/判斷隊(duì)列是否為空,空返回1,否則返回0return q.front=q.rear;vo
16、id enqueue(queue &q,elemtype item)/ 入隊(duì)列if(q.rear+1) % q.maxsize = q.front)/若隊(duì)列已滿,重新分配2倍大的空間q.queue=(elemtype *)realloc(q.queue,2*q.maxsize*sizeof(elemtype);if(q.rear != q.maxsize-1) /原隊(duì)列尾部?jī)?nèi)容向后移for(int i=0; i=q.rear; i+)q.queuei+q.maxsize = q.queuei;q.rear=q.rear+q.maxsize;q.maxsize=2*q.maxsize; / 插入
17、itemq.rear=(q.rear+1)%q.maxsize;q.queueq.rear=item;elemtype outqueue(queue &q) / 出隊(duì)列if(q.front=q.rear) /若空隊(duì)列,則結(jié)束運(yùn)行cerr 隊(duì)列已空,無法刪除! endl;exit(1); /刪除隊(duì)頭元素,并返回該元素q.front=(q.front +1)%q.maxsize;return q.queueq.front;void dfsmatrix(adjmatrix ga,int i,int n,bool *visited) /從vi出發(fā)進(jìn)行dfsint j; couti ; /訪問頂點(diǎn)vi visitedi = 1; /置訪問標(biāo)志 for(j=0; jn; j+ ) /依次訪問vi的未被訪問的所有鄰接點(diǎn) if(gaij != 0 & gaij != maxvalue & !visitedj) dfsmatrix(ga,j,n,visited); void bfsmatrix( adjmatr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《護(hù)理康復(fù)評(píng)定上》課件
- 2021屆天津市楊村一中、寶坻一中等四校高一下學(xué)期期末聯(lián)考化學(xué)試題
- 《綜合醫(yī)院評(píng)審概述》課件
- 小學(xué)四年級(jí)數(shù)學(xué)小數(shù)加減法計(jì)算題練習(xí)卷
- 《汽車車型解析》課件
- 電焊管道焊接技術(shù)
- 美食烹飪行業(yè)調(diào)味技巧培訓(xùn)實(shí)踐
- 物流行業(yè)倉儲(chǔ)管理心得總結(jié)
- 電影院服務(wù)員的服務(wù)技巧
- 印刷行業(yè)采購工作心得
- JJG 633-2024 氣體容積式流量計(jì)
- 2023年河北中煙工業(yè)有限責(zé)任公司筆試試題及答案
- 物質(zhì)與意識(shí)的辯證關(guān)系
- 小學(xué)英語考試教師總結(jié)反思8篇
- (高清版)DZT 0322-2018 釩礦地質(zhì)勘查規(guī)范
- SJ-T 11798-2022 鋰離子電池和電池組生產(chǎn)安全要求
- 多智能體仿真支撐技術(shù)、組織與AI算法研究
- 2023年中考語文二輪復(fù)習(xí):詞意表達(dá) 真題練習(xí)題匯編(含答案解析)
- 安全管理中人因素
- 銅礦的選礦工藝與設(shè)備選擇
- 餐廳年度總結(jié)計(jì)劃
評(píng)論
0/150
提交評(píng)論