版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 實(shí)驗(yàn)題目圖的基本操作2 實(shí)驗(yàn)?zāi)康?)掌握圖的鄰接矩陣、鄰接表的表示方法。2)掌握建立圖的鄰接矩陣的算法。3)掌握建立圖的鄰接表的算法。4)加深對圖的理解,逐步培養(yǎng)解決實(shí)際問題的編程能力3需求分析 (1)編寫圖基本操作函數(shù)。建立圖的鄰接表,鄰接矩陣Create_Graph( LGraph lg. MGraph mg ) 鄰接表表示的圖的遞歸深度優(yōu)先遍歷LDFS( LGraph g, int i )鄰接矩陣表示的圖的遞歸深度優(yōu)先遍歷MDFS( MGraph g,int i, int vn )鄰接表表示的圖的廣度優(yōu)先遍歷LBFS( LGraph g, int s, int n )鄰接矩陣表示的圖
2、的廣度優(yōu)先遍歷MBFS(MGraph g, int s, int n )(2)調(diào)用上述函數(shù)實(shí)現(xiàn)下列操作。建立一個圖的鄰接矩陣和圖的鄰接表。采用遞歸深度優(yōu)先遍歷輸出圖的鄰接矩陣采用遞歸深度優(yōu)先遍歷輸出圖的鄰接表。采用圖的廣度優(yōu)先調(diào)歷輸出圖的鄰接表。采用圖的廣度優(yōu)先遍歷輸出圖的鄰接矩陣4概要設(shè)計(jì)(1) :/*圖的基本操作*/- 鄰接矩陣數(shù)據(jù)類型的定義-/ 最大頂點(diǎn)個數(shù)typedef structchar vexsMAX_VERTEX_NUM;/ 頂點(diǎn)向量 intacrsMAX_VERTEX_NUMMAX_VERTEX_NUM;/ 鄰接矩陣 intvexnum,arcnum;/ 圖當(dāng)前頂點(diǎn)數(shù)和弧數(shù)M
3、Graph ;/-鄰接表數(shù)據(jù)類型的定義-typedef struct ArcNodeint adjvex;/ 該弧所指向的頂點(diǎn)的位置 struct ArcNode *nextarc;/ 指向下一條弧的指針 ArcNode;typedef struct VNodechar data;/ 頂點(diǎn)信息ArcNode *firstarc;/ 指向第一條依附該頂點(diǎn)的弧的指針VNode, AdjListMAX_VERTEX_NUM;typedef structAdjList vertices; int vexnum,arcnum;/ 圖當(dāng)前頂點(diǎn)數(shù)和弧數(shù) LGraph;(2) 本程序主要包含6個函數(shù): 主函數(shù)
4、main() 建立圖的鄰接矩陣,鄰接表 Create_Graph () 鄰接表表示的圖的遞歸深度優(yōu)先遍歷LDFS () 鄰接矩陣表示的圖的遞歸深度優(yōu)先遍歷MDFS () 鄰接表表示的圖的廣度優(yōu)先遍歷LBFS () 鄰接矩陣表示的圖的廣度優(yōu)先遍歷MBFS()各函數(shù)間調(diào)用關(guān)系如下:mainCreate_Graph ()LDFS ()MDFS ()LBFS ()MBFS()(3) 主函數(shù)的偽碼main() 定義鄰接矩陣和鄰接表; 建立鄰接矩陣和鄰接表; 鄰接矩陣MDFS深度優(yōu)先遍歷;鄰接矩陣MBFS廣度優(yōu)先遍歷;鄰接表LDFS深度優(yōu)先遍歷;鄰接表LBFS廣度優(yōu)先遍歷5詳細(xì)設(shè)計(jì)/*圖的基本操作*/-
5、鄰接矩陣數(shù)據(jù)類型的定義-/ 最大頂點(diǎn)個數(shù)typedef structchar vexsMAX_VERTEX_NUM;/ 頂點(diǎn)向量 intacrsMAX_VERTEX_NUMMAX_VERTEX_NUM;/ 鄰接矩陣 intvexnum,arcnum;/ 圖當(dāng)前頂點(diǎn)數(shù)和弧數(shù)MGraph ;/-鄰接表數(shù)據(jù)類型的定義-typedef struct ArcNodeint adjvex;/ 該弧所指向的頂點(diǎn)的位置 struct ArcNode *nextarc;/ 指向下一條弧的指針 ArcNode;typedef struct VNodechar data;/ 頂點(diǎn)信息ArcNode *firstar
6、c;/ 指向第一條依附該頂點(diǎn)的弧的指針VNode, AdjListMAX_VERTEX_NUM;typedef structAdjList vertices; int vexnum,arcnum;/ 圖當(dāng)前頂點(diǎn)數(shù)和弧數(shù) LGraph;int Create_Graph( MGraph *Mg , LGraph *Lg ) / 建立圖的鄰接矩陣,鄰接表輸入圖的頂點(diǎn)個數(shù)(字符),構(gòu)造頂點(diǎn)向量輸入圖的任意兩個頂點(diǎn)的弧構(gòu)造鄰接矩陣構(gòu)造鄰接表void LDFS(LGraph *Lg,int i) 鄰接表表示的圖的遞歸深度優(yōu)先遍歷顯示頂點(diǎn)向量,指針指向下一個頂點(diǎn)向量下一個頂點(diǎn)沒有被訪問,繼續(xù)否則 退會上一個
7、頂點(diǎn)向量的另一個邊void MDFS(MGraph *Mg,int i) 鄰接矩陣表示的圖的遞歸深度優(yōu)先遍歷顯示頂點(diǎn)向量,指針指向下一個頂點(diǎn)向量下一個頂點(diǎn)沒有被訪問,繼續(xù)否則 退會上一個頂點(diǎn)向量的另一個邊void LBFS( LGraph *Lg )鄰接表表示的圖的廣度優(yōu)先遍歷 初始化 visited初始化 隊(duì)列沒被訪問過顯示頂點(diǎn)向量入隊(duì)出隊(duì)訪問下一個頂點(diǎn)向量void MBFS(MGraph *Mg )鄰接矩陣表示的圖的廣度優(yōu)先遍歷 初始化 visited初始化 隊(duì)列沒被訪問過顯示頂點(diǎn)向量入隊(duì)出隊(duì)訪問下一個頂點(diǎn)向量/-主函數(shù)-main() 定義鄰接矩陣和鄰接表; 建立鄰接矩陣和鄰接表; 鄰接矩
8、陣MDFS深度優(yōu)先遍歷;鄰接矩陣MBFS廣度優(yōu)先遍歷;鄰接表LDFS深度優(yōu)先遍歷;鄰接表LBFS廣度優(yōu)先遍歷6測試結(jié)果7. 參考文獻(xiàn)數(shù)據(jù)結(jié)構(gòu)8附錄#include <stdio.h>#include <malloc.h>#include <stddef.h>#include <math.h> #define OK 1#define ERROR 0#define MAX_VERTEX_NUM20/*圖的基本操作*/int visitedMAX_VERTEX_NUM;/ 訪問標(biāo)志數(shù)組/- 鄰接矩陣數(shù)據(jù)類型的定義-/ 最大頂點(diǎn)個數(shù)typedef str
9、uctchar vexsMAX_VERTEX_NUM;/ 頂點(diǎn)向量 intacrsMAX_VERTEX_NUMMAX_VERTEX_NUM;/ 鄰接矩陣 intvexnum,arcnum;/ 圖當(dāng)前頂點(diǎn)數(shù)和弧數(shù)MGraph ;/-鄰接表數(shù)據(jù)類型的定義-typedef struct ArcNodeint adjvex;/ 該弧所指向的頂點(diǎn)的位置 struct ArcNode *nextarc;/ 指向下一條弧的指針 ArcNode;typedef struct VNodechar data;/ 頂點(diǎn)信息ArcNode *firstarc;/ 指向第一條依附該頂點(diǎn)的弧的指針VNode, AdjLi
10、stMAX_VERTEX_NUM;typedef structAdjList vertices; int vexnum,arcnum;/ 圖當(dāng)前頂點(diǎn)數(shù)和弧數(shù) LGraph;/_隊(duì)列函數(shù)_typedef struct Queueint arryMAX_VERTEX_NUM;int front,rear;Queue;Queue Q;void InitQueue()/ 隊(duì)列初始化Q.front=Q.rear=0;int QueueEmpty(Queue *Q)/ 清空隊(duì)列if(Q->front=Q->rear)return 1;elsereturn 0;void EnQueue(Queu
11、e *Q,int w)/ 入隊(duì)if(Q->rear+1)%MAX_VERTEX_NUM=Q->front)printf("Error!");elseQ->arryQ->rear=w;Q->rear=(Q->rear+1)%MAX_VERTEX_NUM;int DeQueue(Queue *Q)/ 出隊(duì)int u; if(Q->front=Q->rear)return -1;u=Q->front;Q->front=(Q->front+1)%MAX_VERTEX_NUM;return u;/_隊(duì)列函數(shù)end_/*
12、函數(shù):Create_Graph*功能:建立圖的鄰接矩陣,鄰接表 *說明:該構(gòu)建的為無向網(wǎng) mg 為鄰接矩陣 ,lg為鄰接表 , 無權(quán)值 */int Locatevex(MGraph *Mg , char v)/ 確定 v 元素在Mg中的位置int i;for(i=0;Mg->vexsi!=v;i+);if(i>Mg->vexnum)/ 輸入的元素不正確則顯示 錯誤printf("ERROR ");return i;/ 返回位置int Create_Graph( MGraph *Mg , LGraph *Lg ) / 建立圖的鄰接矩陣,鄰接表 int i ,
13、 j , k ;char v1 , v2 ;ArcNode *q,*p;printf("輸入圖的頂點(diǎn)數(shù)和弧數(shù): "); scanf("%d %d",&Mg->vexnum,&Mg->arcnum);getchar();Lg->vexnum=Mg->vexnum;/ 鄰接表的頂點(diǎn)數(shù)和弧數(shù) Lg->arcnum=Mg->arcnum;for(i=0;i<Mg->vexnum;i+)/ 構(gòu)造頂點(diǎn)向量 printf("請輸入一個圖的頂點(diǎn)(字符):");scanf("%c
14、" , &Mg->vexsi);getchar();Lg->verticesi.data=Mg->vexsi; / 賦值Lg->verticesi.firstarc=NULL;/ 指向第一條依附該頂點(diǎn)的弧的指針 為空 for(i=0;i<Mg->vexnum;i+)/ 初始化鄰接矩陣for(j=0;j<Mg->vexnum;j+)Mg->acrsij=0 ;for(k=0;k<Mg->arcnum;k+)/ 構(gòu)造鄰接矩陣和鄰接表printf("請輸入一條邊連接的2個頂點(diǎn):");scanf(&
15、quot;%c %c",&v1,&v2);getchar();i=Locatevex(Mg,v1);/ 確定 v1 在Mg 中的位置j=Locatevex(Mg,v2);/ 確定 v2 在Mg 中的位置Mg->acrsji=Mg->acrsij=1;/ 置v1,v2的對稱弧v2,v1p=(ArcNode *)malloc(sizeof(ArcNode); p->adjvex=i;/ 確認(rèn)頂點(diǎn)位置p->nextarc=Lg->verticesj.firstarc;/ 指向下一條弧的指針Lg->verticesj.firstarc=p;
16、/ 賦值q=(ArcNode *)malloc(sizeof(ArcNode); q->adjvex=j;/ 確認(rèn)頂點(diǎn)位置 q->nextarc=Lg->verticesi.firstarc;/ 指向下一條弧的指針Lg->verticesi.firstarc=q;/ 賦值return OK ; /*函數(shù):LDFS*功能:鄰接表表示的圖的遞歸深度優(yōu)先遍歷*說明:*/int LAdjVex(LGraph *Lg,int k)/ 位置 ArcNode *p;for(p=Lg->verticesk.firstarc;p!=NULL;p=p->nextarc)if(!
17、visitedp->adjvex)return p->adjvex;return -1;void LDFS(LGraph *Lg,int i) int k;visitedi=OK;printf("%c",Lg->verticesi.data);for(k=LAdjVex(Lg,i);k>=0;k=LAdjVex(Lg,k)if(!visitedk)LDFS(Lg,k);/*函數(shù):MDFS*功能:鄰接矩陣表示的圖的遞歸深度優(yōu)先遍歷*說明:*/int AdjVes(MGraph *Mg,int k)/ 位置 int i;for(i=0;i<Mg-&
18、gt;vexnum;i+)if(Mg->acrski&&(!visitedi)return i;return -1;void MDFS(MGraph *Mg,int i)/ 遞歸深度優(yōu)先遍歷int k;visitedi=1;/ 訪問標(biāo)志數(shù)組某位 置 1printf("%c",Mg->vexsi);/ 顯示for(k=AdjVes(Mg,i);k>=0;k=AdjVes(Mg,k)if(!visitedk)MDFS(Mg,k);/ 遞歸/*函數(shù):LBFS*功能:鄰接表表示的圖的廣度優(yōu)先遍歷 *說明:*/void LBFS( LGraph *L
19、g )int i,u,w;for(i=0;i<Lg->vexnum;+i)/ 初始化 visitedvisitedi=0;InitQueue();/ 初始化 隊(duì)列for(i=0;i<Lg->vexnum;+i)if(!visitedi)/ 沒被訪問過visitedi=1;printf("%c",Lg->verticesi.data);EnQueue(&Q,i);/ 入隊(duì)while(!QueueEmpty(&Q)u=DeQueue(&Q);/ 出隊(duì)for(w=LAdjVex(Lg,u);w>=0;w=LAdjVex(
20、Lg,u)if(!visitedw)/ 沒被訪問過visitedw=1;printf("%c",Lg->verticesw.data);EnQueue(&Q,w);/ 入隊(duì)/*函數(shù):MBFS*功能:鄰接矩陣表示的圖的廣度優(yōu)先遍歷*說明:*/void MBFS(MGraph *Mg )int i,w,u;for(i=0;i<Mg->vexnum;i+)/ 初始化 visitedvisitedi=0; InitQueue();/ 初始化隊(duì)列for(i=0;i<Mg->vexnum;+i)if(!visitedi)/ 沒被訪問過visited
21、i=1;printf("%c",Mg->vexsi);/ 顯示EnQueue(&Q,i);/ 入隊(duì)while(!QueueEmpty(&Q)u=DeQueue(&Q);/ 出隊(duì)for(w=AdjVes(Mg,u);w>=0;w=AdjVes(Mg,u) if(!visitedw)/ 沒被訪問過visitedw=1;printf("%c",Mg->vexsw); / 顯示EnQueue(&Q,w);/ 入隊(duì)/*主函數(shù)*/void main()int i ;MGraph Mg;LGraph Lg;Create_Graph( &Mg, &Lg);printf(&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)飲食護(hù)理在疾病康復(fù)中的作用
- 信息安全管理要點(diǎn)探討
- 2026年高級會計(jì)實(shí)務(wù)操作技能測試題
- 2026年電子商務(wù)運(yùn)營高級經(jīng)理考試題集及答案
- 2026年計(jì)算機(jī)網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊與防御策略題集
- 2026年網(wǎng)絡(luò)安全工程師認(rèn)證題庫網(wǎng)絡(luò)安全協(xié)議解析202X年度考試題集
- 2026年化學(xué)實(shí)驗(yàn)室安全操作標(biāo)準(zhǔn)化模擬考試
- 2026年?duì)I銷策略市場分析與消費(fèi)者行為試題
- 2026年企業(yè)文化與團(tuán)隊(duì)建設(shè)基礎(chǔ)試題
- 2026年金融風(fēng)險(xiǎn)管理與防控測試題庫
- 養(yǎng)老院電氣火災(zāi)培訓(xùn)課件
- 對外話語體系構(gòu)建的敘事話語建構(gòu)課題申報(bào)書
- 馬年猜猜樂(馬的成語)打印版
- 精神障礙防治責(zé)任承諾書(3篇)
- 2025年擔(dān)保公司考試題庫(含答案)
- 2025年金融控股公司行業(yè)分析報(bào)告及未來發(fā)展趨勢預(yù)測
- 質(zhì)量控制計(jì)劃模板全行業(yè)適用
- 實(shí)施指南(2025)《HG-T3187-2012矩形塊孔式石墨換熱器》
- 人教版PEP五年級英語下冊單詞表與單詞字帖 手寫體可打印
- 家具制造廠家授權(quán)委托書
- 中日友好醫(yī)院公開招聘工作人員3人筆試參考題庫(共500題)答案詳解版
評論
0/150
提交評論