网站大量收购独家精品文档,联系QQ:2885784924

C++面向对象程序设计课设报告无向图的深度与广度的遍历研讨.doc

C++面向对象程序设计课设报告无向图的深度与广度的遍历研讨.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C面向对象程序设计课设报告无向图的深度与广度的遍历研讨

目 录 一、题目概述(内容及要求) 4 二、功能分析 5 三、设计 6 四、运行与测试 9 五、总结 11 参考文献 12 附录....................................................12 一、题目概述(内容及要求) 1.深度优先搜索 深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。 假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶点v0出发,访问此顶点,然后依次从v的未访问的邻接点出发深度优先遍历,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点,重复上述过程,直至所有的顶点都被访问。 2.广度优先搜索 广度优先搜索遍历类似于树的按层次遍历的过程。 假设从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点,重复上述过程,直至所有的顶点都被访问 实现无向连通图的深度与广度遍历。 要求:1.设计数据结构,存储结构; 2.在c兼容环境完成上述题目的代码编写与调试; 3.程序运行界面交互性好; 4.软件运行,给出测试数据。 二、功能分析 1.深度优先搜索: 如图2.1所示,假设从顶点v1出发,进行搜索,在访问了顶点v1之后,选择邻接点v2,。因为v2未曾访问,则从v2出发进行搜索。以次类推,接着从v4,v8,v5出发进行搜索。在访问了v5之后,由于v5的邻接点都已被访问,则搜索回到v8.由于同样的理由,搜索继续回到v4,v2,直到v1,此时由于v1的另一个结点未被访问,则搜索又从v1到v3,再继续进行下去。由此,得到的顶点访问顺序为:v1-v2-v4-v8-v5-v3-v6-v7 算法: void DFS(Graph G,int v) { //从第v个顶点出发递归深度优先遍历图。 visited[v]=TRUE; VisitFunc(v); //访问第v个顶点 for(w=FirstAdjVex(G,v);w=0;w=NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,w);//对v的尚未访问的邻接顶点w递归调用DFS } 图2.1 2.广度优先搜索: 如图2.1所示,假设从顶点v1出发,进行搜索,首先访问顶点v1和v1的邻接点v2和v3,然后依次访问v2的邻接点v4和v5及v3的邻接点v6和v7,最后访问v4的邻接点v8. 由于这些顶点的邻接点均已被访问,并且图中所有顶点都已被访问,由此,完成了图的遍历。得到的顶点访问序列为v1-v2-v3-v4-v5-v6-v7-v8 算法: void BFSTraverse(Graph G,Status(*Visit)(int v)) { //按广度优先非递归遍历图G,使用辅助队列Q和访问标志数组visited。 for(v=0;vG.vexnum;++v) visited[v]=FALSE; InitQueue(Q); //置空的辅助队列Q for(v=0;vG.vexnum;++v) if(!visited[v]) //v尚未访问 { visited[v]=TRUE;visit[v]; EnQueue(Q,v); //v入队列 while(!QueueEmpty(Q)) { DeQueue(Q,u); //队头元素出列并置为u for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)) if(!Visited[w]) //w为u的尚未访问的邻接顶点 { Visited[w]=TRUE; Visit(w); EnQueue(Q,w); } } } } 三、设计 3.1 总体设计 采用邻接矩阵作为图的存储结构。程序中主要用到以下抽象数据类型: 抽象数据类型的定义 typedef struct{ char *vexs; //顶点向量 int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧数 }Graph; 基本操作 CreateUDN(Graph

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档