版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、實驗四圖的操作及應用實驗課程名:數(shù)據(jù)結(jié)構(gòu)與算法 一、實驗目的及要求1、理解圖的基本概念及術(shù)語。2、掌握圖的兩種存儲結(jié)構(gòu) (鄰接矩陣和鄰接表)的表示方法。)的算法思想、步3、熟練掌握圖的兩種遍歷(深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷 驟,并能列出在兩種存儲結(jié)構(gòu)上按上述兩種遍歷算法得到的序列。、實驗內(nèi)容任務一:卞造如圖1所示的圖的鄰接矩陣存儲結(jié)構(gòu)和鄰接表存儲結(jié)構(gòu)。圖1解答:(1)源代碼:#include#include #include #define INFINITY 1000#define MAX_VERTEX_NUM 20#define OK 1#define STARTS、*,、typede
2、f enumDG,DN,UDG,UDN GraphKind;typedef int EType;typedef int InfoType;typedef int VertexType;typedef struct ArcCell/define structure MGraphEType adj;InfoType *info;ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef structVertexType vexsMAX VERTEX NUM;AdjMatrix arcs;int vexnum,arcnum;GraphKind kind
3、;MGraph;int CreatUDN(MGraph &G)CreatUDN() sub-functionint IncInfo,i,j,k,v1,v2,w;coutendlG.vexnum;/input the number of vexcoutG.arcnum;/input the number of arccoutIncInfo;for(i=0;iG.vexnum;+i)for(j=0;jG.vexnum;+j)G.arcsij.adj=INFINITY;/initial G.arcsij.adjG.=NULL;/initial G.cout
4、V2),For example:(V1=1,V2=3),(V1=2,V2=4)”endl;for(k=0;kG.arcnum;+k)/input arc(v1,v2)coutendlPlease input the k+1th arcs v1 (0v1v1;/input v1coutPlease input the k+1th arcs v2 (0v2v2;/input v2coutPlease input the ”k+1w;/input weight i=v1;j=v2;while(iG.vexnum|jG.vexnum)/if (v1,v2) illegal,againcoutPleas
5、e input the k+1th arcs v1 (0v1v1;coutPlease input the k+1th arcs v2 (0v1v2;coutPlease input the k+1w;i=v1;j=v2; /while end i-;j-;G.arcsij.adj=G.arcsji.adj=w;/weightcoutG.arcsi+1j+1.adj=G.arcsj+1i+ 1.adj=wendl;if(IncInfo)coutPlease input the k+1*G.; /for end return (OK); CreatUDN() endvoid
6、 Gprintf(MGraph G) / 打印鄰接矩陣cout鄰接矩陣數(shù)組為:n;for(int i=0;iG.vexnum;i+) for(int k=0;kG.vexnum;k+) coutG.arcsik.adjt; coutendl;/* 鄰接表*/typedef struct ArcNode/define structure ALGraph int adjvex;struct ArcNode *nextarc;InfoType *info;ArcNode;typedef struct VNode(VertexType data;ArcNode *firstarc;VNode,AdjL
7、istMAX_VERTEX_NUM;typedef struct (AdjList vertices;int vexnum,arcnum;int kind;ALGraph;int CreateDG(ALGraph &G)CreateDG() subfunction (int IncInfo,i,j,k,v1,v2,w;coutendlG.vexnum;/input the number of vexcoutG.arcnum;/input the numbe of arccoutIncInfo;/if no information, input 0for(i=0;iG.vexnum;+i) (G
8、.verticesi.data=i; /initial G.verticesi.dataG.verticesi.firstarc=NULL;/initial G.verticesi.firstarc coutV2),For example:(V1=1,V2=3),(V1=2,V2=4)”endl;for(k=0;kG.arcnum;+k)/input arc(v1,v2) (coutendlPlease input the k+1th arcs v1 (0v1v1;coutPlease input the k+1th arcs v2 (0v2v2;i=v1;j=v2;while(iG.vexn
9、um|jG.vexnum) /if (v1,v2) illegal (coutendlPlease input the k+1th arcs v1 (0v1v1;coutPlease input the k+1th arcs v2 (0v2v2;i=v1;j=v2; /while end i-;j-;ArcNode *p;p=(ArcNode *)malloc(sizeof(ArcNode);/allocate memoryif(!p)coutadjvex=j; /assign p-adjvex p-nextarc=G.verticesi.firstarc; p-info=NULL;G.ver
10、ticesi.firstarc=p;if(IncInfo)cout*(p-info); /input information /for endreturn (OK); /CreateDG() endint main()MGraph MG;ALGraph AG;int a=-1;while(a!=0)coutSTARTSSTARTSendl;cout(1)鄰接矩陣(無向網(wǎng))t(2) 鄰接表(有向圖)t(3) 退出 endl;couta;switch(a)CreatUDN(MG);Gprintf(MG);break;CreateDG(AG);break;a=0;break;default:cout
11、選擇錯誤 nV2), For exanqle: (Vl=l, V2=3), (Vl=2, V2=4).Please input the 1th arcs vl (0vlG, vexnunO : 1Please input the 1th arcs v2 (0v2G.vexnuirO :2Please input the 1th arc? s weight 二EG. arcs 1 2- adj=G. arcs 2 1. adj =3Flease input the 2th arcs vl (071G. vexnunO : 1Please input the 2th arc1s v2 (0v2G,
12、 veKnunO :2Please input the 2th arc1 s weight :63. arcsl 2. adj=G. arcs2 1. adj-6Please input the 3th arc s vl (0vlG. vexnuirO : 1.Please input the Sth arc5 s v2 (0v2G* vexnuirO : 3Flease input the Sth arc1s weight :2G.arcstl 3,adj=G, arcs31, adj=2Please input the 4th arc? s vl (0vlG. vexnum) :2Plea
13、se input the 4th arc? s v2 C0v2G. vexnunO :三please input the 4th arc s weight :3j. arcs2 3. &dj=G. arcs3 2j. adj=3FIpifp i r ir riciseii G. dii. j _2F: f*f i r ric.i2u irFid4三巳iiG,2二匚三三ricicc ir iiFiease ir ,一河w ,ri t 11 Flmmma irF: F4FF _i r ?G“ MT,二三一三Please ir Pl F4FF i rF1e?iee _ir G. di = _4F:口
14、可ff i rF p:i:-p irT-Kt trip 5i-:i Hi:;叮:i- 1 .C-. -pT-niji1 : ?.Ti :t t:-in F.-t-iErfUniim :Fii?ntliiuHtn.jI/lYuijA : uhHBUHHhT-i :t t:-in F-tn ir:叮:J1TmiE :5f. L;tLjijril.ii1.一二工七工:1LUJ:4i:.uttht.七二:JU七工UCL:匚unit the -A di iveid.t : 4:t:lJ.t?ji-;Lt?i.-ii 1 TCL,匚mil二L:七ipi:t thp 1十? 臼丁J:噌葉一t :弓專 Lit
15、tE二”.二 1且二L d,; :I 1 iHXnl-CL1:4T-l:tt?lAf-1HI:,T.I(.-PT:-LlOl: Hpijt t:-iP ri-r -i ,-ir.-叫f i 汁 t 1 1i;-i:t t/iA 匕:;:t廣一一 I 1 w 1, G.二工門wi :、G. arcs 5 挎王陣) 1000E62tloooiIOCiOF10001春搽 國爭存儲:6 adj=G* arcs6 5. adj-1 救組為:)2100010001000LOGO3100061000S1000645LOGO6100010001)4IODO10001LOGO5111000“無向向:* * (2
16、;鄰接靠潘總酋)+* *方式:2(3)運行結(jié)運用數(shù)組上 任務二:用, 遍歷和廣度。,果分析:弓鏈表的結(jié)合來實現(xiàn)鄰接表的存儲結(jié)構(gòu)創(chuàng)建一個如圖2所示的圖a,分別打印出這兩個圖的深度優(yōu)先亡先遍歷的結(jié)點信息序列。(b)圖 2解答:(1)源代碼:#include#include#includeusing namespace std;#define ERROR 1#define MAX_VERTEX_NUM 100typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;string info;ArcNode;typedef struct VNode
17、char date;ArcNode * firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef structAdjList vertices;int vexnum,arcnum; /當前圖的 vexnum頂點數(shù)和 arcnum 弧數(shù)int kind;ALGraph;int LocateVex(ALGraph &G,char &v1)int i;for(i=0;i=G.vexnum)return ERROR;elsereturn 0;void CreateDG(ALGraph &G)ArcNode *p,*q;char v1,v2;char v;int i,j,
18、k,n;cout請輸入圖的頂點數(shù)和弧數(shù):G.vexnum;cinG.arcnum;cout請輸入頂點:endl;for(i=0;iv;G.verticesi.date=v;G.verticesi.firstarc=NULL;cout請輸入弧尾和弧頭:;for(k=0;kv1;cinv2;i=LocateVex(G,v1);j=LocateVex(G,v2);if(G.verticesi.firstarc=NULL)(p=(ArcNode *)new ArcNode;G.verticesi.firstarc=p;q=G.verticesi.firstarc;else(q=G.verticesi.
19、firstarc;for(n=0;nnextarc)(if(!q-nextarc) break;p=(ArcNode *)new ArcNode;q-nextarc=p;q=q-nextarc;q-adjvex=j;q-nextarc=NULL;coutadjvex;if(visitedi=false)n=i;return n;int NextAdjVex(ALGraph &G,int v)int i;int n=-1;ArcNode *p;p=G.verticesv.firstarc;for(i=p-adjvex;iadjvex;if(visitedi=false)n=i;break;els
20、ep=p-nextarc;return n;void VisitFuc(ALGraph &G,int v)coutG.verticesv.date=0;w=NextAdjVex(G,v) if(!visitedw) DFS(G,w);10)void DFSTraverse(ALGraph &G)(int v;for(v=0;vG.vexnum;v+)visitedv=false;cout 深度優(yōu)先搜索:endl;for(v=0;vG.vexnum;v+)(if(!visitedv)DFS(G,v);)/ 廣度優(yōu)先遍歷/void BFSTraverse(ALGraph &G)(int v;int w;queue q; /STL隊歹!Jfor(v=0;vG.vexnum;v+)visitedv=false;/ InitQueue(Q);cout 廣度優(yōu)先搜索:;for(v=0;v=0;w=NextAdjVex(G,v) if(!visitedw)(visitedw=true;VisitFuc(G,w);q.push(w)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《基于離子導電水凝膠在可穿戴傳感器的制備與應用研究》
- 《童慶炳比較詩學思想研究》
- 《二維材料堆疊結(jié)構(gòu)間弱相互作用及電子結(jié)構(gòu)研究》
- 《趙季平民族管弦樂創(chuàng)作研究》
- 《親水短肽基因NLEA1的組裝及功能鑒定》
- 2024健身房器材購買與安裝合同
- 《非物質(zhì)文化遺產(chǎn)的知識產(chǎn)權(quán)法保護》
- 《蘇木提取物對VSMC細胞增殖及大鼠血管再狹窄模型PPAR-NFAT通路的影響》
- 2024年房地產(chǎn)銷售合同的房產(chǎn)位置、銷售價格和付款方式
- 商務活動策劃方案
- 河北省石家莊市長安區(qū)2023-2024學年五年級上學期期中英語試卷
- 品牌經(jīng)理招聘筆試題及解答(某大型國企)2025年
- 多能互補規(guī)劃
- 珍愛生命主題班會
- 《網(wǎng)絡數(shù)據(jù)安全管理條例》課件
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 天一大聯(lián)考●皖豫名校聯(lián)盟2024-2025學年高三上學期10月月考試卷語文答案
- 八年級歷史上冊(部編版)第六單元中華民族的抗日戰(zhàn)爭(大單元教學設計)
- 全國農(nóng)業(yè)技術(shù)推廣服務中心公開招聘應屆畢業(yè)生補充(北京)高頻難、易錯點500題模擬試題附帶答案詳解
- 公司研發(fā)項目審核管理制度
- 《詩意的色彩》課件 2024-2025學年人美版(2024)初中美術(shù)七年級上冊
評論
0/150
提交評論