![數(shù)據(jù)結(jié)構(gòu) 圖的四種遍歷_第1頁(yè)](http://file4.renrendoc.com/view2/M03/21/2E/wKhkFmZ-6jmAHFPeAAFQtdfdQqE584.jpg)
![數(shù)據(jù)結(jié)構(gòu) 圖的四種遍歷_第2頁(yè)](http://file4.renrendoc.com/view2/M03/21/2E/wKhkFmZ-6jmAHFPeAAFQtdfdQqE5842.jpg)
![數(shù)據(jù)結(jié)構(gòu) 圖的四種遍歷_第3頁(yè)](http://file4.renrendoc.com/view2/M03/21/2E/wKhkFmZ-6jmAHFPeAAFQtdfdQqE5843.jpg)
![數(shù)據(jù)結(jié)構(gòu) 圖的四種遍歷_第4頁(yè)](http://file4.renrendoc.com/view2/M03/21/2E/wKhkFmZ-6jmAHFPeAAFQtdfdQqE5844.jpg)
![數(shù)據(jù)結(jié)構(gòu) 圖的四種遍歷_第5頁(yè)](http://file4.renrendoc.com/view2/M03/21/2E/wKhkFmZ-6jmAHFPeAAFQtdfdQqE5845.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/****圖的存儲(chǔ)結(jié)構(gòu)定義及實(shí)現(xiàn)*************/
#defineMaxVerNum30/*最大頂點(diǎn)個(gè)數(shù)*/
#defineVextypechar
#defineInfoTypeint
#defineEdgetypeint
#defineINFINITE999
#defineMAXSIZE100
typedefstruct
(
Vextypevexs[MaxVerNum];/*頂點(diǎn)表7
Edgetypeedges[MaxVerNum][MaxVerNum];/*鄰接矩陣,即邊表*/
intn,e;/*頂點(diǎn)數(shù)和邊數(shù)*/
JMGragh;/*MGragh是以鄰接矩陣存儲(chǔ)的圖類型*/
typedefstructnode
{/*表結(jié)點(diǎn)*/
intadjvex;/*鄰接點(diǎn)域,普通是放頂點(diǎn)對(duì)應(yīng)的序號(hào)或者在表頭向量中的
標(biāo)*/下
InfoTypeInfo;/*與邊(或者?。┫嚓P(guān)的信息*/
structnode*next;/*指向下一個(gè)鄰接點(diǎn)的指針域*/
JEdgeNode;
typedefstructvnode
(/*頂點(diǎn)結(jié)點(diǎn)*/
Vextypevertex;r頂點(diǎn)域*/
EdgeNode*firstedge;/*邊表頭指針*/
JVertexNode;
typedefstruct
(
VertexNodeadjlist[MaxVerNum];/*鄰接表*/
intn,e;/*頂點(diǎn)數(shù)和邊數(shù)*/
}ALGraph;/*ALGraph是以鄰接表方式存儲(chǔ)的圖類型7
voidCreatGraph(MGragh*G)/*建立圖G的鄰接矩陣7
inti,j,k,w;
charch;
輸入圖的頂點(diǎn)數(shù)和邊數(shù),如
輸入頂點(diǎn)數(shù)和邊數(shù)*/
請(qǐng)逐個(gè)輸入圖的頂點(diǎn):
for(i=0;i<G->n;i++)
(
while(ch=='')〃處理讀取回車符的異常情況
G->vexs[i]=ch;
//輸入頂點(diǎn)信息,建立頂點(diǎn)表7
}
for(i=0;i<G->n;i++)
(
for(j=0;jvG->n;j++)
(
if(i==j)
G->edges[i]0]=O;〃對(duì)角線元素為0
else
G->edges[i][j]=INFINITE;〃其它元素元素為無(wú)窮大
//G->edges[i][j]=O;/*初始化鄰接矩陣7
)
)
請(qǐng)逐個(gè)輸入圖的邊:如i,j:w...(索引下標(biāo)從0開(kāi)始
for(k=0;k<G->e;k++)
(
/*輸入e條邊,建立鄰接矩陣*/
G->edges[i][j]=w;
///*輸入e條邊,建立鄰接矩陣*/
//G->edges[i]0]=1;/*若加入G->edges[j][i]=1,則為無(wú)向圖的鄰接矩陣*/
)
〃打印圖
voidprintGragp(MGragh*G)
頂點(diǎn)如下:
for(inti=0;i<G->n;i++)
)
鄰接矩陣如下:
for(inti=O;i<G->n;i++)
(
for(intj=O;j<G->n;j++)
)
)
/*根據(jù)圖的鄰接矩陣存儲(chǔ)建立圖的鄰接表存儲(chǔ)*/
voidCreateALGraph(MGragh*G,ALGraph*alG)
(
alG->n=G->n;
alG->e=G->e;
for(inti=0;i<alG->n;i++)
(
alG->adjlist[i].vertex=G->vexs[i];
alG->adjlist[i].firstedge=NULL;
EdgeNode*p;
for(intj=O;j<G->n;j++)
(
if(G->edges[i][j]!=O&&G->edges[i][j]!=INFINITE)
(
p=(EdgeNode*)malloc(sizeof(EdgeNode));
p->adjvex=j;
p->lnfo=G->edges[i][j];
p->next=alG->adjlist[i].firstedge;
alG->adjlist[i].firstedge=p;
)
)
)
)
voidprintALGragp(ALGraph*alG)
(
鄰接表如下
for(inti=0;i<alG->n;i++)
EdgeNode*edge=alG->adjlist[i].firstedge;
while(edge)
edge=edge->next;
)
)
)
/★★★★★★★★★★★★★★★★★★★★★★★it木戈Ij,彳[****************
typedefstruct
(
intdata[MAXSIZE];
inttop;
JSeqStack,*PSeqStack;
PSeqStacklnit_SeqStack(void)
{〃創(chuàng)建一順序棧,入口參數(shù)無(wú),返回一個(gè)指向順
序棧的指針,為零表示分配空間失敗*/
PSeqStackS;
S=(PSeqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
returnS;
)
voidDestroy_SeqStack(PSeqStack*SeqStackPoint)
{/*銷毀順序底,入口參數(shù):為要銷毀的順序棧指針地址*/
if(*SeqStackPoint)
free(*SeqStackPoint);
*SeqStackPoint=NULL;
return;
}
intEmpty_SeqStack(PSeqStackS)
{/*判斷棧是否為空,入口參數(shù):順序棧,返回值:1表示為空,0表示非空*/
if(S->top==-1)
return1;
else
return0;
intPush_SeqStack(PSeqStackS,intx)
{/*入口參數(shù):順序棧,返回值:1表示入棧成功,0表示失敗。*/
if(S->top==MAXSIZE-1)
return0;/*棧滿不能入棧*/
else
(
S->top++;
S->data[S->top]=x;
return1;
)
)
intOut_SeqStack(PSeqStackS,int*x)
{/*取出棧頂元素,入口參數(shù):順序棧,被取出的元素指針,這里用
指針帶出棧頂值返回值:1表示成功,0表示失敗。7
if(Empty_SeqStack(S))
return0;/*棧空*/
else
(
*x=S->data[S->top-];/*棧頂元素存入*x中7
return(1);
}
)
intGetStackTop(PSeqStackstack)
(
returnstack->top;
)
/************************隊(duì)列的定義與算法********************
typedefstruct
(
intdat磯MAXSIZE];/*隊(duì)列的存儲(chǔ)空間*/
intfront,rear;/*隊(duì)頭隊(duì)尾指針*/
}SeqQueue,*PSeqQueue;
PSeqQueuelnit_SeqQueue()
{/*返回值:新順序隊(duì)列指針,null表示失敗*/
PSeqQueueQ;
Q=(PSeqQueue)malloc(sizeof(SeqQueue));
if(Q){
Q->front=0;
Q->rear=O;
)
returnQ;
)
voidDestroy_SeqQueue(PSeqQueue*Q)
(
if(*Q)
free(*Q);
*Q=NULL;
intEmpty_SeqQueue(PSeqQueueQ)
/?返回值:1表示為空,0表示非空*/
{if(Q&&Q->front==Q->rear)
return(1);
else
return(0);
)
intln_SeqQueue(PSeqQueueQ,intx)
{/*返回值:1表示成功,一1表示隊(duì)滿溢出*/
if((Q->rear+1)%MAXSIZE==Q->front)
(
隊(duì)滿
return-1;/*隊(duì)滿不能入隊(duì)*/
)
else
{Q->rear=(Q->rear+1)%MAXSIZE;
Q->data[Q->rear]=x;
return1;/*入隊(duì)完成*/
)
)
intOut_SeqQueue(PSeqQueueQ,int*x)
{/*返回值:1表示成功,一1表示隊(duì)空,出隊(duì)的元素保存到*x7
if(Empty_SeqQueue(Q))
隊(duì)空
return-1;/*隊(duì)空不能出隊(duì)7
)
else
(
Q->front=(Q->front+1)%MAXSIZE;
*x=Q->data[Q->front];
return1;/*出隊(duì)完成*/
)
)
intFront_SeqQueue(PSeqQueueQ,int*x)
{/*返回值:1表示成功,一1表示隊(duì)空*/
if(Q->front==Q->rear)
(
隊(duì)空
return-1;/*隊(duì)空不能得到隊(duì)頭元素7
)
else
(
*x=Q->data[(Q->front+1)%MAXSIZE];
return1;/*取隊(duì)頭元素操作完成*/
}
)
/****圖的遍歷*************/
intvisited[MaxVerNum];
〃深度鄰接矩陣
voidDFS(MGraghg,intv)
visited[v]=1;
for(inti=0;i<g.n;i++)
(
if(g.edges[v][i]!=O&&g.edges[v][i]!=INFINITE)
(
if(!visited[i])
DFS(g,i);
)
)
)
voidDFSTranverseForMG(MGraghg)
鄰接矩陣的深度遍歷結(jié)果:
for(inti=O;i<g.n;i++)
visited[i]=O;
for(intj=O;j<g.n;j++)
(
if(!visited[j])
DFS(g,j);
)
)
〃廣度鄰接矩陣
voidBFS(MGraghg,intv)
(
PSeqQueueQ;
Q=lnit_SeqQueue();
visited[v]=1;
ln_SeqQueue(Q,v);
inti;
while(!Empty_SeqQueue(Q))
(
Out_SeqQueue(Q,&i);
for(intj=O;j<g.n;j++)
(
if(g.edges[i][j]!=O&&g.edges[i][j]!=INFINITE)
(
if(!visited[j])
(
visited[j]=1;
ln_SeqQueue(Q,j);
)
)
)
)
)
voidBFSTranverseForMG(MGraghg)
鄰接矩陣的廣度遍歷結(jié)果:
for(inti=O;i<g.n;i++)
visited[i]=O;
for(intj=O;j<g.n;j++)
(
if(!visited[j])
BFS(g,j);
)
)
〃深度鄰接表
voidDFS2(ALGraphg,intv)
(
EdgeNode*P;
intw;
visited[v]=1;
for(p=g.adjlist[v].firstedge;p;p=p->next)
(
w=p->adjvex;
if(!visited[w])
DFS2(g,w);
)
)
voidDFSTranverseForALG(ALGraphg)
(
鄰接表的深度遍歷結(jié)果:
for(inti=0;i<g.n;i++)
visited[i]=O;
for(intj=O;j<g,n;j++)
(
if(!visited[j])
DFS2(g,j);
)
)
〃廣度鄰接表
voidBFS2(ALGraphg,intv)
EdgeNode*p;
PSeqQueueQ;
Q=lnit_SeqQueue();
visited[v]=1;
ln_SeqQueue(Q,v);
inti,w;
while(!Empty_SeqQueue(Q))
(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鋰輝石合作協(xié)議書
- 2025年氣體檢測(cè)設(shè)備合作協(xié)議書
- 2025年印刷品、記錄媒介復(fù)制品合作協(xié)議書
- 2025年買賣個(gè)人房屋合同(4篇)
- 2025年臨時(shí)工聘用合同協(xié)議標(biāo)準(zhǔn)版本(三篇)
- 山西省2024七年級(jí)道德與法治上冊(cè)第二單元成長(zhǎng)的時(shí)空第七課在集體中成長(zhǎng)情境基礎(chǔ)小練新人教版
- 2025年臨時(shí)工解除合同樣本(2篇)
- 2025年人防門制作安裝工程施工合同模板(2篇)
- 2025年個(gè)人無(wú)息借款合同經(jīng)典版(2篇)
- 2025年二人合作經(jīng)營(yíng)協(xié)議參考模板(三篇)
- 使用錯(cuò)誤評(píng)估報(bào)告(可用性工程)模版
- 六年級(jí)語(yǔ)文下冊(cè)閱讀及參考答案(12篇)
- 《發(fā)展?jié)h語(yǔ)(第二版)中級(jí)綜合(Ⅰ)》第7課+課件
- 第四章《數(shù)列》復(fù)習(xí)小結(jié)示范公開(kāi)課教學(xué)PPT課件【高中數(shù)學(xué)人教A版】
- GB/T 8944.1-2008紙漿成批銷售質(zhì)量的測(cè)定第1部分:漿板漿包及漿塊(急驟干燥漿)漿包
- 蘇教版(蘇少版)九年級(jí)美術(shù)下冊(cè)全冊(cè)課件
- 2022年江蘇省鹽城市中考英語(yǔ)試題及參考答案
- 中國(guó)文化簡(jiǎn)介英文版(ChineseCultureintroduction)課件
- 文化差異與跨文化交際課件(完整版)
- 工程經(jīng)濟(jì)學(xué)完整版課件全套ppt教程
- 鼻空腸營(yíng)養(yǎng)的護(hù)理及注意事項(xiàng)ppt
評(píng)論
0/150
提交評(píng)論