




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验五 图的基本操作一、实验目的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. 深度优先搜索遍历的时间复杂度和广度优先搜索遍历相同,两者不同之处仅仅在于对顶点的访问顺序不同。五.实验结果构造图,输入关于图的数据,进行遍历的顶点开始深度优先搜索遍历和广度优先搜索遍历五、总结这次实验让我深刻的理解了用邻接表做存储结构时怎么构造无向图, 以及图的两种遍历方式是怎么实现, 本次试验采用的是邻接表的方式实现图的深度优先遍历和广度优先遍历。对于深度优先遍历,主要是采用递归的方式,广度优先遍历借助队列来实现。七.源程序(带注释)#includeusing namespace std;#define MaxVerNum 50struct edgenodeint endver;int inform;edgenode* edgenext;struct vexnodechar vertex;edgenode* edgelink;struct Graphvexnode adjlistsMaxVerNum;int vexnum;int arcnum;/队列的定义及相关函数的实现struct QueueNodeint nData;QueueNode* next;struct QueueListQueueNode* 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;elseQ-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请输入顶点数和边数:G-vexnumG-arcnum;cout开始输入顶点表:endl;for (i=0;ivexnum;i+)cinG-adjlistsi.vertex;G-adjlistsi.edgelink=NULL;cout开始输入边表信息:endl;for (k=0;karcnum;k+)cout请输入边对应的顶点:;cinij;p1=new edgenode;p1-endver=j;p1-edgenext=G-adjlistsi.edgelink;G-adjlistsi.edgelink=p1;p2=new edgenode;p2-endver=i;p2-edgenext=G-adjlistsj.edgelink;G-adjlistsj.edgelink=p2;/因为是无向图,所以有两次建立边表的过程/-深度优先遍历void DFS(Graph *G,int i,int visit)coutadjlistsi.vertexadjlistsi.edgelink;if(G-adjlistsi.edgelink&!visitp-endver)DFS(G,p-endver,visit);void DFStraversal(Graph *G,char c)/深度优先遍历cout该图的深度优先遍历结果为:endl;int visitMaxVerNum;for(int i=0;ivexnum;i+)visiti=0;/全部初始化为0,即未访问状态int m;for (int i=0;ivexnum;i+)if (G-adjlistsi.vertex=c)/根据字符查找序号m=i;DFS(G,i,visit);break;/继续访问未被访问的结点for(int i=0;ivexnum;i+)if(visiti=0)DFS(G,i,visit);coutfront=Q-rear=NULL;EnQueue(Q,v);while(Q-rear!=NULL)int e=0;DeQueue(Q,&e);coutadjlistse.vertexadjlistse.edgelink;if(p)int m=p-endver;if(m=0)EnQueue(Q,m);while(visitm=0)p=p-edgenext;if(p=NULL)break;m=p-endver;EnQueue(Q,m);void BFStraversal(Graph *G,char c)cout该图的广度优先遍历结果为:endl;int visitedMaxVerNum;for (int i=0;ivexnum;i+)visitedi=0;int m;for (int i=0;ivexnum;i+)if (G-adjlistsi.vertex=c)m=i;BFS(G,i,visited);break;/继续访问未被访问的结点for(int i=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上外卖加盟合同范本
- 酒店住宿协议合同模板
- 泊寓网上转租合同范本
- 装修清洁施工合同范本
- 道路检测服务合同范本
- 软件开发岗位合同范本
- 物料印刷制作合同范本
- 服装检验服务合同范本
- 私人土地购买合同范本
- 自动贩卖机合同协议书
- 2025年度哈尔滨市平房区纪委监委公开招聘雇员2人考试参考题库及答案解析
- 2025年江西省高考化学试卷真题(含答案)
- 情绪管理课2025年职场压力释放与心灵成长分析报告
- 2025年征地拆迁考试题及答案
- 巡游出租车考试题及答案
- 2025年秋季学期人教版三年级上册数学教学计划含教学进度表(三篇)
- 2025至2030中国方竹笋市场经营方向与竞争格局分析报告
- 2025年人教版三年级数学上册《混合运算》教案
- 2025医用眼科器械消毒处理标准流程
- 胸部穿刺教学课件
- 2025-2026学年苏教版(2024)小学科学三年级上册(全册)课时练习及答案(附目录P102)
评论
0/150
提交评论