免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验6无向图中求两点间的所有简单路径背景简单路径:如果一条路径上的顶点除了起点和终点可以相同外,其它顶点均不相同,则称此路径为一条简单路径。问题描述若用无向图表示高速公路网,其中顶点表示城市,边表示城市之间的高速公路。试设计一个找路程序,获取两个城市之间的所有简单路径。基本要求(1) 输入参数:结点总数,结点的城市编号(4位长的数字,例如电话区号,长沙是0731),连接城市的高速公路(用高速公路连接的两个城市编号标记)。(2) 输入 要求取所有简单路径的两个城市编号。(3) 将所有路径(有城市编号组成)输出到用户指定的文件中。实现提示基于DFS的思想。一、需求分析城市分布不均,且无向,两个城市之间有路连接,根据特点,可以抽象成一个无向图,城市为各点,高速路为边。按照用户的输入建立一个邻接表,输出两个点的所有路径。(1) 输入的形式和输入值的范围:本程序要求首先输入一个正整数值N,代表城市总数,然后依次输入城市的代号,可以用四位数字表示。因此,用整数来存储。(2) 输出的形式:根据输入的数据,进行输入,若能成功,则将所有序列输出,若不能成功,则提示报错。(3) 程序所能达到的功能:程序要求能够识别输入城市编号列表,高速公路,需要查找路径的两个城市时的错误,能够判断输入的两个城市之间是否存在路径,如果存在路径要求能够将路径输出。二、概要设计 因为所有顶点的特征一致,并且顶点和其他的多个顶点间可能存在联系,由此顶点之间存在一个网状结构,顶点间的联系与方向无关,所以用一个无向图表示高速公路网,其中顶点表示城市,边表示城市之间的高速公路,数据的对象是图中的每一个顶点和无向边。由此为本问题确定一个图的数据关系。1.抽象数据类型图的ADT数据对象:V,R(图是由一个顶点集 V 和一个弧集 R构成的数据结构)数据关系:Graph = (V,R) VR|v,wV且P(v,w)基本操作: int n() =0; / 返回图节点数int e() =0; /返回图边数int first(int)=0;/返回该节点的第一条邻边void setEdge(int v1, int v2)/加边int next(int, int) =0; /返回下一条邻边int getMark(int) =0;/有标记吗void setMark(int, int) =0;/设置标记2.算法的基本思想(1)首先将图中每个顶点的访问标志初始化为0,每访问一个点,则访问标记改为1。 从图中给定的顶点V 出发,访问此顶点,然后依次从V的各个未被访问的邻接点出发深度优先搜索遍历图,每访问一个顶点,访问标记为1,把该点存入数组中,直至在图中遍历到和V有路径相通的目标顶点V0,输出该条简单路径。如果此次路径访问的顶点已经被访问,将上一个顶点访问标志设为0,继续访问其余邻接点,如果没有邻接点,则返回上一个顶点,将访问标志设为0,继续用DFS查找简单路径。如果算法结束,没有简单路径输出,那么输出没有简单路径(2)图的存储:用邻接矩阵来存储3.程序的流程 (1) 初始化模块:输入城市数量,再输入相应城市编号及相邻城市间的通路路径, 构建一个邻接矩阵来初始化一个无向图。 (2) DFS模块:对无向图进行深度优先搜索,查找的两顶点之间若存在通路时的所 有简单路径。 (3) 输出模块:若两城市(顶点)间存在通路,那么输出所有的简单路径。否则,输 出没有简单路径,结束程序。 三、详细设计图的存储:用邻接矩阵来存储:根据输入的顶点个数N创建一个N*N的矩阵,将其全部赋初值。然后根据边的情况来输入对应边的位置。(一) 无向图的基本操作 (邻接矩阵)1. 初始化一个有向图Graphm(int numVert)int i,j;numVertex = numVert; /顶点数numEdge=0;mark=new intnumVert; /初始化标志数组 for(i=0;inumVertex;i+) marki=0; /每一个顶点的标志值初始化为0 matrix =(int*) new int*numVertex; for(i=0;inumVertex;i+) matrixi=new intnumVertex; /构建一个相邻矩阵 for(i=0;inumVertex;i+) for(j=0;jnumVertex;j+) matrixij=0;2. 有向图的销毁Graphm()delete mark;for(int i=0;inumVertex;i+)delete matrixi;delete matrix; /销毁相邻矩阵3. 获取第一个邻居int first(int v) /返回该点的第一条邻边int i;for(i=0;inumVertex;i+)if(matrixvi!=0) return i; /当顶点和顶点i有边时,返回顶点i的值 return i;int next(int v1,int v2) /获得v1的邻居v2int i;for(i=v2+1;inumVertex;i+)if(matrixv1i!=0) return i;return i;4. 其他基本操作void setEdge(int v1,int v2) /设置无向图的边if(matrixv1v2=0)numEdge+;matrixv1v2=1;int getMark(int v) /获取顶点标记的值return markv;int setMark(int v,int val) /设置访问的标记值markv=val;(2) 获得顶点的下标的函数为了方便表示对应顶点在相邻矩阵的位置关系,用一个整型数组存储顶点的值(城市编号),所以存储顶点的数组的下标可以用来映射为顶点构建的相邻矩阵的下标。每次要获得顶点对应的下标时,用顶点与数组中数据逐个比较,在相等时返回该值的下标。int getNum(int *vert,int n,int s)for(int i=0;i=1) /当该点为目的顶点并且路径大于等于一cout这两个城市间一条的简单路径为:;flag=1;for (i=0;i=d;i+)coutpathi; /输出该条路径coutendl;for (w=G.first(n);wG.n();w=G.next(n,w) /继续查找该顶点的相邻顶点if (G.getMark(w)=0)temp=DFS_all(G,w,v1,path,d,vert,flag);G.setMark(n,0);/恢复,可以再寻找d-;return flag;算法的具体步骤设置一个标志变量flag,赋初值为0,当有一条简单路径输出时,flag变为1。如果DFS结束后flag仍为0,那么输出没有找到简单路径。 如图伪代码实现如下: Graphm T; int v100,path100; int flag=0,d=-1; /标志变量flag coutn; T.CreatGraphm(n); /构建一个n*n的矩阵存放图 /获得城市编号 /输入不同两个城市的边的关系while(v1!=0)&(v2!=0)T.setEdge(n1,n2); /无向图中,两顶点间边的关系对称T.setEdge(n2,n1); /从不同顶点设置两次边/输入查找的城市编号flag =DFS_all(T,v1,v2,path,d,v,f);if(flag =0)/输出没有路径算法的时空分析邻接矩阵的空间代价为(|V|2),查找设共计访问的结点次数为k,则易知函数的时间开 销为(k)。输入和输出的格式输入输入城市数量输入城市编号for(i=0;in;i+) cout每个城市的区号(四位):vi; 输入之间有高速公路连接的城市编号:cinv1v2;while(v1!=0)&(v2!=0) n1=getNum(v,n,v1);n2=getNum(v,n,v2);T.setEdge(n1,n2);T.setEdge(n2,n1);cout输入不同两个城市的边的关系,区
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江宁波市璟诚企业运营管理有限公司劳务派遣招聘1人备考题库有完整答案详解
- 2026台州临海市市属国有企业招聘工作人员49人备考题库含答案详解(培优a卷)
- 2026黄河科技学院附属医院招聘18人备考题库(含答案详解)
- 2026四川经准特种设备检验有限公司第一次招聘急需紧缺专业技术人员33人备考题库含答案详解(研优卷)
- 2026贵州省外经贸集团本部党委综合部多岗招聘4人备考题库附答案详解(黄金题型)
- 2026上海华东师范大学河口海岸全国重点实验室系统生态学课题组招聘备考题库含答案详解(培优a卷)
- 2026广东佛山市高明国盈市政工程建设有限公司第一期招聘3人备考题库附答案详解(轻巧夺冠)
- 2026福建福州市鼓楼区城市管理综合执法大队安泰中队招聘2人备考题库附答案详解(精练)
- 2026北京大学人事部招聘1名劳动合同制人员备考题库附答案详解(精练)
- 2026辽宁铁岭市卫生健康委员会校园招聘56人备考题库附答案详解(模拟题)
- 地黄课件教学课件
- 《CSCO分化型甲状腺癌诊疗指南》
- 2025年河北中烟工业有限责任公司招聘考试笔试试卷附答案
- 结直肠癌预防科普课件
- 2025年海南省纪委监委所属事业单位招聘事业编制人员8人考试模拟试题及答案解析
- QFD品管圈课件教学课件
- 2024人教版七年级地理下学期期末质量检测试卷(含答案)
- 四川创牧农业有限公司创牧农业40万羽有机蛋鸡养殖基地建设项目环境影响报告书
- 供应室提高腔镜器械清洗质量PDCA案例
- 《职业教育学新编(第4版)》 试题及答案汇 绪论、第1-9章 职业教育的内涵-职业教育改革
- 大学生身心健康自我关注与管理课程大纲
评论
0/150
提交评论