实验五图的基本操作.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验五图的基本操作

实验五 图的基本操作一、实验目的1、使学生可以巩固所学的有关图的基本知识。2、熟练掌握图的存储结构。3、熟练掌握图的两种遍历算法。二、实验内容 [问题描述] 对给定图,实现图的深度优先遍历和广度优先遍历。[基本要求] 以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。【测试数据】 由学生依据软件工程的测试技术自己确定。三.算法设计 1、主要思想:图的深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。假设初始状态是图中所有定点未曾被访问,则深度优先搜索可以从图中的某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先搜索遍历此图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问为止,所使用的为递归算法。图的广度优先搜索遍历类似于树的按层次遍历的过程。假设从图中某定点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的定点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问为止,过程需要使用数组,非递归。2、本程序包含三个模块1)创建图void CreatAdjList(Graph* G) 2)深度优先搜索遍历void DFS(Graph *G,int i,int visit[])3)广度优先搜索遍历void BFS(Graph* G,int v,int visit[])void BFStraversal(Graph *G,char c)四.调试分析 1.在遍历图时,对图中每个顶点至多调用一次DFS函数,因为一旦某个顶点被标志程已被访问,就不再从它出发进行搜索。2.遍历图的过程实质上是对每个顶点查找其邻接点的过程。其耗费的时间取决于所采用的存储结构。3. 深度优先搜索遍历的时间复杂度和广度优先搜索遍历相同,两者不同之处仅仅在于对顶点的访问顺序不同。五.实验结果构造图,输入关于图的数据,进行遍历的顶点开始深度优先搜索遍历和广度优先搜索遍历五、总结这次实验让我深刻的理解了用邻接表做存储结构时怎么构造无向图, 以及图的两种遍历方式是怎么实现, 本次试验采用的是邻接表的方式实现图的深度优先遍历和广度优先遍历。对于深度优先遍历,主要是采用递归的方式,广度优先遍历借助队列来实现。七.源程序(带注释)#includeiostreamusing namespace std;#define MaxVerNum 50struct edgenode{int endver;int inform;edgenode* edgenext;};struct vexnode{char vertex;edgenode* edgelink;};struct Graph{vexnode adjlists[MaxVerNum];int vexnum;int arcnum;};//队列的定义及相关函数的实现struct QueueNode{int nData;QueueNode* next;};struct QueueList{QueueNode* front;QueueNode* rear;};void EnQueue(QueueList* Q,int e){QueueNode *q=new QueueNode;q-nData=e;q-next=NULL;if(Q==NULL)return;if(Q-rear==NULL)Q-front=Q-rear=q;else{Q-rear-next=q;Q-rear=Q-rear-next;}}void DeQueue(QueueList* Q,int* e){if (Q==NULL)return;if (Q-front==Q-rear){*e=Q-front-nData;Q-front=Q-rear=NULL;}else{*e=Q-front-nData;Q-front=Q-front-next;}}//创建图void CreatAdjList(Graph* G){int i,j,k;edgenode* p1;edgenode* p2;cout请输入顶点数和边数:endl;cinG-vexnumG-arcnum;cout开始输入顶点表:endl;for (i=0;iG-vexnum;i++){cinG-adjlists[i].vertex;G-adjlists[i].edgelink=NULL;}cout开始输入边表信息

文档评论(0)

haocen + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档