图的DFS或BFS遍历Word文档格式.docx

上传人:b****6 文档编号:16186226 上传时间:2022-11-21 格式:DOCX 页数:16 大小:53.76KB
下载 相关 举报
图的DFS或BFS遍历Word文档格式.docx_第1页
第1页 / 共16页
图的DFS或BFS遍历Word文档格式.docx_第2页
第2页 / 共16页
图的DFS或BFS遍历Word文档格式.docx_第3页
第3页 / 共16页
图的DFS或BFS遍历Word文档格式.docx_第4页
第4页 / 共16页
图的DFS或BFS遍历Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

图的DFS或BFS遍历Word文档格式.docx

《图的DFS或BFS遍历Word文档格式.docx》由会员分享,可在线阅读,更多相关《图的DFS或BFS遍历Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

图的DFS或BFS遍历Word文档格式.docx

二、实验环境

1.操作系统:

Windows7

2.开发软件:

MicrosoftVisualC++6.0

三、实验内容

●程序功能

本程序完成了以下功能:

1.创建图

2.图的深度遍历

3.图的广度遍历

●数据结构

本程序中使用的数据结构:

1.它的优缺点

1)图的深度优先遍历类似于树的前序遍历。

采用的搜索方法的特点是尽可能先对纵深方向进行搜索。

减轻了程序员的负担,其用的是递归算法。

2)缺点:

加重了计算机的负担,变的很繁琐。

2.逻辑结构图

 

3.存储结构图

4.存储结构的C/C++语言描述

structedgenode

{

intendver;

intinform;

edgenode*edgenext;

};

structvexnode

charvertex;

edgenode*edgelink;

structGraph

vexnodeadjlists[MaxVerNum];

intvexnum;

intarcnum;

structQueueNode

intnData;

QueueNode*next;

structQueueList

QueueNode*front;

QueueNode*rear;

●算法描述

本程序中采用的算法

1.算法名称:

递归

2.算法原理或思想

其是通过一层一层的递归,遍历到最后一个结点。

3.算法特点

4.图的深度优先遍历类似于树的前序遍历。

●程序说明

1.系统流程图

2.程序模块

1)创建图模块:

将图创建并确定结点数和边数同时录入结点名。

代码:

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;

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

}

2)深度遍历模块:

将图进行深度遍历。

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)

3)广度遍历模块:

将图进行广度遍历。

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

QueueList*Q=newQueueList;

Q->

front=Q->

rear=NULL;

EnQueue(Q,v);

while(Q->

rear!

=NULL)

inte=0;

DeQueue(Q,&

e);

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->

EnQueue(Q,m);

}

}

voidBFStraversal(Graph*G,charc)

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

intvisited[MaxVerNum];

for(inti=0;

visited[i]=0;

adjlists[i].vertex==c)

BFS(G,i,visited);

if(visited[i]==0)

四、调试与运行

1.程序调试

调试:

程序开发过程不可能没有BUG,你用了哪些手段或方法发现并改正错误。

本程序开发过程中,采用的调试方法或手段如下:

1)方法1:

在程序执行的终止的函数中加一条输出语句cout<

”*******”<

endl;

进行错误的定位,调试了指针没有正确使用的错误。

2)方法2:

输出一些结点中的数据,看能不能正确的输出,调试了数据是否正确的录入了。

2.运行结果

运行结果图1

……

五、实验总结

1.结果分析:

本程序完成了图的创建和图的深度遍历、广度遍历功能;

但是还是存在不完善的地方,没有将图的大体构造展现在屏幕上,让人有点不是很明白。

2.心得体会:

通过这个实验我更熟练的掌握了递归算法,再次得以巩固,觉得数据结构是一个很不错的一门课程。

#include<

iostream.h>

#defineMaxVerNum50

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

voidEnQueue(QueueList*Q,inte)

QueueNode*q=newQueueNode;

q->

nData=e;

next=NULL;

if(Q==NULL)

return;

if(Q->

rear==NULL)

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;

//创建图

//-------------------------------------------------------------深度优先遍历

//-------------------------------------------------------------广度优先遍历

voidmain()

Graph*G=newGraph;

CreatAdjList(G);

charch;

请输入开始遍历的顶点:

ch;

DFStraversal(G,ch);

BFStraversal(G,ch);

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

当前位置:首页 > 高中教育 > 语文

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

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