实验四图的遍历与应用广度优先遍历.docx

上传人:b****6 文档编号:6584876 上传时间:2023-01-08 格式:DOCX 页数:8 大小:123.37KB
下载 相关 举报
实验四图的遍历与应用广度优先遍历.docx_第1页
第1页 / 共8页
实验四图的遍历与应用广度优先遍历.docx_第2页
第2页 / 共8页
实验四图的遍历与应用广度优先遍历.docx_第3页
第3页 / 共8页
实验四图的遍历与应用广度优先遍历.docx_第4页
第4页 / 共8页
实验四图的遍历与应用广度优先遍历.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实验四图的遍历与应用广度优先遍历.docx

《实验四图的遍历与应用广度优先遍历.docx》由会员分享,可在线阅读,更多相关《实验四图的遍历与应用广度优先遍历.docx(8页珍藏版)》请在冰豆网上搜索。

实验四图的遍历与应用广度优先遍历.docx

实验四图的遍历与应用广度优先遍历

实验四图的遍历与应用

一、实验目的

1.掌握图的含义;

2.掌握用邻接矩阵和邻接表的方法描述图的存储结构;

3.理解并掌握深度优先遍历和广度优先遍历的存储结构。

二、实验要求

1.认真阅读和掌握本实验的参考程序。

2.按照对图的操作需要,在创建好图后再通过遍历算法验证创建结果。

3.保存程序的运行结果,并结合程序进行分析。

三、实验内容

以下参考程序是按邻接表的方法创建图,然后用深度优先遍历方法遍历图。

请认真理解程序,然后实现图的广度优先遍历。

广度优先遍历:

具体实验的详细代码:

#defineMaxVerNum100/*最大顶点数为*/

#defineMAXSIZE100

typedefenum{False,True}boolean;

#include"stdio.h"

#include"stdlib.h"

typedefintDataType;

booleanvisited[MaxVerNum];

typedefstruct/*定義一個隊列*/

{

DataTypedata[MAXSIZE];

intfront,rear;

}SeqQueue,*PSeqQueue;

PSeqQueueInit_SeqQueue()/*隊列初始化*/

{

PSeqQueueQ;

Q=(PSeqQueue)malloc(sizeof(SeqQueue));

if(Q)

{

Q->front=0;

Q->rear=0;

}

returnQ;

}

intIn_SeqQueue(PSeqQueueQ,DataTypex)/*入隊操作*/

{

if((Q->rear+1)%MAXSIZE==Q->front)

{

printf("隊滿");

return-1;

}

else

{

Q->rear=(Q->rear+1)%MAXSIZE;

Q->data[Q->rear]=x;

return1;

}

}

intEmpty_SeqQueue(PSeqQueueQ)/*判斷隊空*/

{

if(Q&&Q->front==Q->rear)

return

(1);

else

return(0);

}

intOut_SeqQueue(PSeqQueueQ,DataType*x)/*出對操作*/

{

if(Empty_SeqQueue(Q))

{

printf("隊空");

return-1;

}

else

{

Q->front=(Q->front+1)%MAXSIZE;

*x=Q->data[Q->front];

return1;

}

}

typedefstructnode/*表结点*/

{

intadjvex;/*邻接点域,一般是放顶点对应的序号或在表头向量中的下标*/

charInfo;/*与边(或弧)相关的信息*/

structnode*next;/*指向下一个邻接点的指针域*/

}EdgeNode;

typedefstructvnode/*顶点结点*/

{

charvertex;/*顶点域*/

EdgeNode*firstedge;/*边表头指针*/

}VertexNode;

typedefstruct

{

VertexNodeadjlist[MaxVerNum];/*邻接表*/

intn,e;/*顶点数和边数*/

}ALGraph;/*ALGraph是以邻接表方式存储的图类型*/

voidVisit(DataTypew)

{

printf("%d",w);

}

 

//建立一个无向图的邻接表存储的算法如下:

voidCreateALGraph(ALGraph*G)/*建立有向图的邻接表存储*/

{

inti,j,k;

/*intN,E;*/

EdgeNode*p;

printf("请输入顶点数和边数:

");

scanf("%d%d",&G->n,&G->e);

printf("n=%d,e=%d\n\n",G->n,G->e);

getchar();

for(i=0;in;i++)/*建立有n个顶点的顶点表*/

{

printf("请输入第%d个顶点字符信息(共%d个):

",i+1,G->n);

scanf("%c",&(G->adjlist[i].vertex));/*读入顶点信息*/

getchar();

G->adjlist[i].firstedge=NULL;/*顶点的边表头指针设为空*/

}

for(k=0;k<2*G->e;k++)/*建立边表*/

{

printf("请输入边对应的顶点序号(共%d个):

",2*G->e);

scanf("%d%d",&i,&j);/*读入边的顶点对应序号*/

p=(EdgeNode*)malloc(sizeof(EdgeNode));//生成新边表结点p

p->adjvex=j;/*邻接点序号为j*/

p->next=G->adjlist[i].firstedge;/*将结点p插入到顶点Vi的链表头部*/

G->adjlist[i].firstedge=p;

}

printf("\n图已成功创建!

对应的邻接表如下:

\n");

for(i=0;in;i++)

{

p=G->adjlist[i].firstedge;

printf("%c->",G->adjlist[i].vertex);

while(p!

=NULL)

{

printf("[%c]",G->adjlist[p->adjvex].vertex);

p=p->next;

}

printf("\n");

}

printf("\n");

}/*CreateALGraph*/

intFirstAdjVertex(ALGraph*g,intv)//找图g中与顶点v相邻的第一个顶点

{

if(g->adjlist[v].firstedge!

=NULL)return(g->adjlist[v].firstedge)->adjvex;

elsereturn0;

}

 

intNextAdjVertex(ALGraph*g,intvi,intvj)//找图g中与vi相邻的,相对相邻顶点vj的下一个相邻顶点

{

EdgeNode*p;

p=g->adjlist[vi].firstedge;

while(p!

=NULL&&p->adjvex!

=vj)p=p->next;

if(p!

=NULL&&p->next!

=NULL)returnp->next->adjvex;

elsereturn0;

}

 

voidBFS(ALGraph*G,intv)

{

/*從v出發按廣度優先遍歷圖G;使用輔助隊列Q和訪問標誌數組visited*/

EdgeNode*p;

intu,w;

PSeqQueueQ;/*定義一個隊列*/

Q=Init_SeqQueue();/*置空的隊列Q*/

Visit(v);/*訪問v,注意Visit函數和visited數組的區別*/

visited[v]=True;/*把訪問標誌置True*/

In_SeqQueue(Q,v);/*v入隊列*/

while(!

Empty_SeqQueue(Q))

{

Out_SeqQueue(Q,&u);/*出隊列*/

for(p=G->adjlist[u].firstedge;p;p=p->next)

{

w=p->adjvex;

if(!

visited[w])

{

Visit(w);

visited[w]=True;

In_SeqQueue(Q,w);/*u的尚未訪問的鄰接頂點w入隊列Q*/

}

}

}

}/*BFS*/

 

voidBFStraverse(ALGraphG)

{

intv;

for(v=0;v

visited[v]=False;

for(v=0;v

if(!

visited[v])BFS(&G,v);

}

voidmain()

{

intv;

ALGraphG;

CreateALGraph(&G);

printf("该无向图的廣度优先搜索序列为:

");

BFStraverse(G);

printf("\nSuccess!

\n");

}

 

广度优先遍历实验结果截图:

欢迎下载,谢谢观看!

资料仅供参考学习

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1