图的基本操作数据实验报告书Word文件下载.docx

上传人:b****7 文档编号:22490909 上传时间:2023-02-04 格式:DOCX 页数:18 大小:60.54KB
下载 相关 举报
图的基本操作数据实验报告书Word文件下载.docx_第1页
第1页 / 共18页
图的基本操作数据实验报告书Word文件下载.docx_第2页
第2页 / 共18页
图的基本操作数据实验报告书Word文件下载.docx_第3页
第3页 / 共18页
图的基本操作数据实验报告书Word文件下载.docx_第4页
第4页 / 共18页
图的基本操作数据实验报告书Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

图的基本操作数据实验报告书Word文件下载.docx

《图的基本操作数据实验报告书Word文件下载.docx》由会员分享,可在线阅读,更多相关《图的基本操作数据实验报告书Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

图的基本操作数据实验报告书Word文件下载.docx

[问题描述]

  对给定图,实现图的深度优先遍历和广度优先遍历。

[基本要求]

   以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。

以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。

【测试数据】

  由学生依据软件工程的测试技术自己确定。

三、实验前的准备工作

1、掌握图的相关概念。

2、掌握图的逻辑结构和存储结构。

3、掌握图的两种遍历算法的实现。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

3、算法设计

1、程序所需头文件已经预处理宏定义和结构体定义如下

#include<

iostream.h>

#defineMaxVerNum100

structedgenode

{

intendver;

intinform;

edgenode*edgenext;

};

structvexnode

charvertex;

edgenode*edgelink;

structGraph

vexnodeadjlists[MaxVerNum];

intvexnum;

intarcnum;

2、队列的定义及相关函数的实现

structQueueNode

intnData;

QueueNode*next;

structQueueList

QueueNode*front;

QueueNode*rear;

voidEnQueue(QueueList*Q,inte)

QueueNode*q=newQueueNode;

q->

nData=e;

next=NULL;

if(Q==NULL)

return;

if(Q->

rear==NULL)

Q->

front=Q->

rear=q;

else

{

rear->

next=q;

rear=Q->

next;

}

}

voidDeQueue(QueueList*Q,int*e)

if(Q==NULL)

if(Q->

front==Q->

rear)

*e=Q->

front->

nData;

rear=NULL;

3、创建无向图

voidCreatAdjList(Graph*G)

inti,j,k;

edgenode*p1;

edgenode*p2;

cout<

<

"

请输入顶点数和边数:

endl;

cin>

>

G->

vexnum>

arcnum;

开始输入顶点表:

for(i=0;

i<

vexnum;

i++)

cin>

adjlists[i].vertex;

G->

adjlists[i].edgelink=NULL;

开始输入边表信息:

for(k=0;

k<

k++)

cout<

请输入边<

Vi,Vj>

对应的顶点:

;

i>

j;

p1=newedgenode;

p1->

endver=j;

edgenext=G->

adjlists[i].edgelink;

adjlists[i].edgelink=p1;

p2=newedgenode;

p2->

endver=i;

adjlists[j].edgelink;

adjlists[j].edgelink=p2;

//因为是无向图,所以有两次建立边表的过程

4、深度优先遍历

voidDFS(Graph*G,inti,intvisit[])

adjlists[i].vertex<

"

visit[i]=1;

edgenode*p=newedgenode;

p=G->

if(G->

adjlists[i].edgelink&

&

!

visit[p->

endver])

{

DFS(G,p->

endver,visit);

voidDFStraversal(Graph*G,charc)//深度优先遍历

该图的深度优先遍历结果为:

intvisit[MaxVerNum];

for(inti=0;

visit[i]=0;

//全部初始化为0,即未访问状态

intm;

if(G->

adjlists[i].vertex==c)//根据字符查找序号

{

m=i;

DFS(G,i,visit);

break;

}

//继续访问未被访问的结点

for(i=0;

if(visit[i]==0)

5、广度优先遍历

voidBFS(Graph*G,intv,intvisit[])

QueueList*Q=newQueueList;

Q->

EnQueue(Q,v);

while(Q->

rear!

=NULL)

inte=0;

DeQueue(Q,&

e);

cout<

adjlists[e].vertex<

visit[e]=1;

edgenode*p=newedgenode;

p=G->

adjlists[e].edgelink;

if(p)

intm=p->

endver;

if(m==0)

EnQueue(Q,m);

while(visit[m]==0)

p=p->

edgenext;

if(p==NULL)

break;

m=p->

voidBFStraversal(Graph*G,charc)

该图的广度优先遍历结果为:

intvisited[MaxVerNum];

for(inti=0;

visited[i]=0;

intm;

for(i=0;

if(G->

adjlists[i].vertex==c)

m=i;

BFS(G,i,visited);

//继续访问未被访问的结点

for(i=0;

if(visited[i]==0)

4、调试与测试

我们开始测试数据,如图:

由图可知,我们得出了结果。

五、总结

通过做这次实验,发现自己在数据结构这门课中还有很多不足有很多知识还没掌握,所以在写程序的时候出现了很多的错误,及还有很多的知识不以灵活运用。

因为以前C语言没有掌握好,所以这次做本次实验还是有点吃力,刚开始完全没有思,后来经过查找资料,在自己的努力下和同学的帮助下,终于完了本次实验。

还要注意输入的问题,什么时候用空格,什么时候用回车,这一点是需要注意的,因为一旦数据的输入有问题,结果当然也就不可能正确了。

只有正确的输入数据,建立图,才能得出正确的遍历结果。

此次实验发现的自己的不足,我相信在以后的学习中,我会更加的努力。

六、源代码

//队列的定义及相关函数的实现

//创建图

//深度优先遍历

//广度优先遍历

QueueList*Q=newQueueList;

Q->

EnQueue(Q,v);

while(Q->

inte=0;

DeQueue(Q,&

visit[e]=1;

edgenode*p=newedgenode;

p=G->

if(p)

intm=p->

if(m==0)

{

EnQueue(Q,m);

while(visit[m]==0)

{

p=p->

if(p==NULL)

break;

m=p->

EnQueue(Q,m);

}

}

intvisited[MaxVerNum];

for(inti=0;

visited[i]=0;

BFS(G,i,visited);

if(visited[i]==0)

voidmain()

Graph*G=newGraph;

CreatAdjList(G);

charch;

请输入开始遍历的顶点:

ch;

DFStraversal(G,ch);

BFStraversal(G,ch);

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

当前位置:首页 > 高等教育 > 文学

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

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