实验07 图的两种存储和遍历.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文档。上传文档
查看更多
实验07 图的两种存储和遍历

实验07图的两种存储和遍历实验学时:2学时实验类型:上机背景知识:图的存储、遍历及其应用。目的要求:1.掌握图的存储思想及其存储实现。2.掌握图的深度、广度优先遍历算法思想及其程序实现。实验内容:键盘输入数据,分别建立一个有向图和一个无向图的邻接表。输出该邻接表。在有向图的邻接表的基础上计算各顶点的度,并输出。采用邻接表存储实现无向图的深度优先遍历。采用邻接表存储实现无向图的广度优先遍历。在主函数中设计一个简单的菜单,分别调试上述算法。*综合训练地下迷宫探索:假设有一个地下通道迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关。请问你如何从某个起点开始在迷宫中点亮所有的灯并回到起点?输入格式:输入第一行给出三个正整数,分别表示地下迷宫的节点数N(1N≤1000,表示通道所有交叉点和端点)、边数M(M≤3000,表示通道数)和探索起始节点编号S(节点从1到N编号)。随后的M行对应M条边(通道),每行给出一对正整数,分别是该条边直接连通的两个节点的编号。输出格式:若可以点亮所有节点的灯,则输出从S开始并以S结束的包含所有节点的序列,序列中相邻的节点一定有边(通道);否则虽然不能点亮所有节点的灯,但还是输出点亮部分灯的节点序列,最后输出0,此时表示迷宫不是连通图。由于深度优先遍历的节点序列是不唯一的,为了使得输出具有唯一的结果,我们约定以节点小编号优先的次序访问(点灯)。在点亮所有可以点亮的灯后,以原路返回的方式回到起点。输入样例:6 8 11 22 33 44 55 66 43 61 5输出样例:1 2 3 4 5 6 5 4 3 2 1实验说明: 1.类型定义(邻接表存储) #define MAX_VERTEX_NUM 20 //顶点最大个数typedefstructArcNode{intadjvex;structArcNode *nextarc;intweight; //边的权值 }ArcNode; //表结点 #define VertexTypeint //顶点元素类型typedefstructVNode{VertexType data;ArcNode *firstarc;}VNode, AdjList[MAX_VERTEX_NUM]; //typedefstruct{AdjList vertices;intvexnum,arcnum;//顶点的实际数,边的实际数int kind;}ALGraph; 2.上述类型定义可以根据实际情况适当调整。3.算法4、5分别利用栈、队列实现非递归算法。注意问题: 1.注意理解各算法实现时所采用的存储结构。2.注意区别正、逆邻接。地下迷宫探索#include?cstdio?? ??#include?sstream?? ??#include?cstring?? ??#include?iostream ??#include?string ??#include?vector ??#include?algorithm ??#include?queue ????using?namespace?std;????#define??N?1005 ????int?n?,?m?,?s?;????vectorint?vt[N]?;????bool?cmp(int?x?,int?y)??{??????return?x??y?;??}????bool?vis[N]?;??dequeint?que?;??bool?flag?;?//?输出控制 ??int?outLen?;?//?判断是否可以遍历所有节点 ????void?dfs()??{??????int?sta?=?que.back()?;??????if(sta?==?s??vis[s])??????????return?;??????int?len?=?vt[sta].size();??????if(len??1)??????????sort(vt[sta].begin()?,vt[sta].end()?,?cmp);????????for(int?i?=?0?;?i??len?;i++)??????{??????????int?nextNum?=?vt[sta][i]?;??????????if(!vis[nextNum])??????????{??????????????if(!flag)?//?打印入队列的路径 ??????????????{??????????????????printf(%d,sta)?;??????????????????flag?=?true?;??????????????????outLen?++?;??????????????}else

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档