- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二、广度优先遍历 类似于树的层次遍历 在访问了起始点V0后, 首先依次访问V0的各个邻接点, 再依次访问这些顶点中未被访问过的邻接点,以此类推 直到所有被访问到的顶点的邻接点都被访问过为止 例:广度优先遍历 1 2 3 4 7 8 5 6 从顶点1出发的广度优先遍历序列可有多种,如: 1,3,2,7,6,5,4,8 1,2,3,5,4,7,6,8 1 2 4 8 5 6 3 7 在广度优先遍历中,使用到了队列来保存已访问过的顶点。 广度优先遍历算法(邻接表存储) void bfs(int i) //从顶点i出发进行广度优先遍历 { int q[n+1]; //定义q为队列 int f,r; link *p; //p为搜索指针 f=r=0; //队列指针初始化 couta[i].vexdata ; visited[i]=1; //访问顶点i r++;q[r]=i; //起始点入队 while(fr) //队不空时 { f++;i=q[f]; //访问过的顶点出队 p=a[i].firarc; //p指向第一个邻接点 while (p!=NULL) { if (!visited[p-Adjvex]) //尚未访问过 { coutp-Adjvex ; visited[p-Adjvex]=1; r++;q[r]=p-Adjvex; //访问后进队} p=p-nextarc;} //找下一个邻接点 } } 第四节 图的应用 一、单元最短路径 二、拓扑排序 三、关键路径 图的应用非常广泛,例如: 用图可以表示一座城市的交通联系的情况; 用有值图可以表示两座城市之间的距离、车费、或班次数目; 表示城市之间建立的通讯网络; 可以描述化学结构式; 图中两点之间的最短距离问题。 北京 常州 上海 800 100 350 从有向网的源点到其它各终点有否路径?最短路径是什么?最短路径长度是多少? 两个顶点间长度最短的路径,不是指路径上边数的总和,而是指路径上各边权值的总和。 注意:路径是一个结点序列,路径的长度是其权值的和,称为距离,所以最短路径长度就是最短距离。 单源最短路径:图中某结点到其他各结点的最短路径。 一、单源最短路径 求单源最短路径的(dijkstra)思想 设置并逐步扩充一个集合S,存放已求出其最短路径的顶点,则尚未确定最短路径的顶点集合是V-S,其中V为网中所有顶点集合。按最短路径长度递增的顺序逐个将V-S中的顶点加S中。 10 1 2 3 5 4 4 2 20 6 2 12 V={1,2 ,3,4,5} S={1} W=V-S={2 ,3,4,5} 设源点为V1, W中顶点对应的距离值初值是这样规定的:若图中有弧V1,Vj,则Vj顶点的距离为此弧权值,否则为∞ 1 2 3 5 4 4 2 20 6 10 2 12 V={1,2 ,3,4,5} S={1} W=V-S={2 , 3, 4, 5} 到V1的距离 2 ∞ 6 20 到V1的距离 0 求单源最短路径的(dijkstra)思想 然后每次从W中的顶点中选一个其距离值为最小的顶点Vm加入到S中,每往S中加入一个顶点Vm,就要对W中的各个顶点的距离值进行一次修改。 到V1的距离 2 ∞ 6 20 W=V-S={2 , 3, 4, 5} 到V1的距离 0 到V1的距离 12 6 20 W=V-S={3, 4, 5} 到V1的距离 0 2 修改后再在W中选距离值最小的顶点加入到S中,如此进行下去,直到S中包含了图中所有顶点. 若加进Vm做中间顶点,使Vl,Vm+Vm,Vj的值小于Vl,Vj值,则用Vl, Vm+Vm,Vj代替原来Vj的距离。 1 2 3 5 4 4 2 20 6 10 2 12 V={1,2 ,3,4,5} S={1} S={1,2} 迪克斯特拉(dijkstra)算法 1 2 3 5 4 4 2 20 6 10 2 12 0 2 ∞ 6 20 1 2 3 4 5 Dist path 1
原创力文档


文档评论(0)