图的基本概念图的存储结构图的遍历最小生成树最短路径ppt课件.ppt
《图的基本概念图的存储结构图的遍历最小生成树最短路径ppt课件.ppt》由会员分享,可在线阅读,更多相关《图的基本概念图的存储结构图的遍历最小生成树最短路径ppt课件.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 图的基本概念 图的存储结构 图的遍历 最小生成树 最短路径 拓扑排序 关键路径源 点 终 点 最 短 路 径路 径 长 度 v0 v1(v0, v1)10 v2 (v0, v1, v2) (v0, v3, v2) 60 50 v3(v0, v3)30 v4(v0, v4)(v0, v3, v4) (v0, v3, v2, v4)100 90 60算法的基本思想算法的基本思想 设置并逐步扩充一个集合设置并逐步扩充一个集合S S,存放已求,存放已求出的最短路径的顶点,则尚未确定最短路径出的最短路径的顶点,则尚未确定最短路径的顶点集合是的顶点集合是V-SV-S, 为了直观起见,我们设想为了直观起见
2、,我们设想S S中顶点均被中顶点均被涂成红色,涂成红色,V-SV-S中的顶点均被涂成蓝色。算中的顶点均被涂成蓝色。算法初始化时,红点集中仅有一个源点,以后法初始化时,红点集中仅有一个源点,以后每一步都是按最短路径长度递增的顺序,逐每一步都是按最短路径长度递增的顺序,逐个地把蓝点集中的顶点涂成红色后,加入到个地把蓝点集中的顶点涂成红色后,加入到红点集中。红点集中。算法粗框:算法粗框:while ( S 中的红点数中的红点数 n ) 在当前蓝点集中选择一个最短路径长度最短的在当前蓝点集中选择一个最短路径长度最短的 蓝点扩充到蓝点集中;蓝点扩充到蓝点集中;那么,如何在蓝点集中选择一个最短那么,如何在
3、蓝点集中选择一个最短路径长度最短的蓝点呢?路径长度最短的蓝点呢?注意:这种蓝点所对应的最短路径上注意:这种蓝点所对应的最短路径上,除终点外,其余顶点都是红点。为此,除终点外,其余顶点都是红点。为此,对于图中每一个顶点对于图中每一个顶点 i i ,都必须记住从,都必须记住从v v 到到i i 、且中间只经过红点的最短路径的长、且中间只经过红点的最短路径的长度,并将此长度记作度,并将此长度记作 i i 的的距离值距离值。 开始时,红点集只有一个源点开始时,红点集只有一个源点v v,初始,初始蓝点集中的蓝点蓝点集中的蓝点j j的距离值的距离值DjDj均为有向边均为有向边上的权值。上的权值。 用数组用
4、数组D(n)D(n)来存放来存放n n个顶点的距离值。个顶点的距离值。若当前蓝点集中具有最小距离值的蓝点是若当前蓝点集中具有最小距离值的蓝点是k k,则其距离值则其距离值D(k)D(k)是是k k的最短路径长度的最短路径长度,并,并且且k k是蓝点集中最短路径长度最短的顶点是蓝点集中最短路径长度最短的顶点。证明:证明: (距离值(距离值D(k)D(k)是是k k的最短路径长度)的最短路径长度)若若D(k)D(k)不是不是k k的最短路径长度,则必存在另外一条的最短路径长度,则必存在另外一条从源点从源点v v到到k k的路径的路径P P,其长度小于,其长度小于D(k)D(k)。由距离值的定。由距
5、离值的定义可知,路径义可知,路径P P上必然包含一个或多个蓝点作为中间点上必然包含一个或多个蓝点作为中间点。假设从源点沿。假设从源点沿P P向前第一次碰到的蓝点是向前第一次碰到的蓝点是x x,则,则P P上从上从源点源点v v到到x x的这一段路径的长度,显然不小于的这一段路径的长度,显然不小于x x的距离值的距离值D(x)D(x)。而。而P P上从上从x x到终点到终点k k所经过的边上,其权值均为非所经过的边上,其权值均为非负实数,所以负实数,所以D(x)=PD(x)=P的长度。又因为的长度。又因为P P的长度的长度D(k)(D(k)(这是假设前提这是假设前提) ),于是有下述不等式:,于
6、是有下述不等式:D(x) = PD(x) = P的长度的长度 D(k) D(k)由此可知:由此可知:D(x) D(k)D(x) = D(k)= D(k)。若。若i i的最短路径的最短路径P P包含其它蓝点作为中间点,包含其它蓝点作为中间点,设设P P上第一个蓝点是上第一个蓝点是j j,则,则P P上从上从v v到到j j的路径长度就是的路径长度就是j j的距离值的距离值D(j)D(j)。显然,。显然,D(j)=D(k)D(j)=D(k),而,而P P的长度的长度= =D(j)+jD(j)+j到到i i的长度,因为的长度,因为j j到到i i的长度为非负实数,所以的长度为非负实数,所以 P P的
7、长度的长度=D(k)=D(k)。由此可知蓝点集中任意顶点。由此可知蓝点集中任意顶点i i的最短的最短路径长度都不会小于路径长度都不会小于k k的最短路径长度的最短路径长度D(k)D(k)。 扩充红点集的方法:每一步只要在当前蓝点集中扩充红点集的方法:每一步只要在当前蓝点集中选择一个具有最小的距离值的蓝点选择一个具有最小的距离值的蓝点k k扩充到红点集合中扩充到红点集合中,k k被涂成红色之后,剩余的蓝点的距离值可能由于增被涂成红色之后,剩余的蓝点的距离值可能由于增加了新红点加了新红点k k而发生变化(即减少)。因此必须调整当而发生变化(即减少)。因此必须调整当前蓝点集中各蓝点的距离值。前蓝点集
8、中各蓝点的距离值。算法框架算法框架:S = v;置初始蓝点集中各蓝点的距离值;置初始蓝点集中各蓝点的距离值;while ( S中红点数中红点数 n ) 在当前蓝点集中选择距离值最小的顶点在当前蓝点集中选择距离值最小的顶点k; S = S + k; /* 将将k涂成红色加入红点集涂成红色加入红点集 */ 调整剩余蓝点的距离值;调整剩余蓝点的距离值; 如何调整剩余蓝点的距离值呢?如何调整剩余蓝点的距离值呢? 若新红点若新红点k k加入红点集加入红点集S S后,使得某个蓝点后,使得某个蓝点j j的距离值的距离值D(j)D(j)减少,则必定是由于存在一条从源减少,则必定是由于存在一条从源点点v v途径
9、新红点途径新红点k k最终到达蓝点最终到达蓝点j j且中间只经过红且中间只经过红点的、新的最短路径点的、新的最短路径P Pvkjvkj,它的长度小于从源点,它的长度小于从源点v v到达到达j j且中间只经过老红点(即步包含且中间只经过老红点(即步包含k k)的原最)的原最短路径短路径P Pvjvj的长度的长度D(j)D(j)。由于。由于P Pvkjvkj是一条中间只经是一条中间只经过红点的最短路径,所以,它的前一段从过红点的最短路径,所以,它的前一段从v v到到k k的的路径必定是路径必定是k k的最短路径,其长度为的最短路径,其长度为D(k)D(k);它的;它的后一段从后一段从k k到到j
10、j的路径的路径P Pkjkj只可能有两种情形:其一只可能有两种情形:其一是由是由k k经过边经过边直达蓝点直达蓝点j j;其二是从;其二是从k k出发再出发再经过经过S S中若干老红点后到达中若干老红点后到达j j。用反正法证明后一种情形是不可能的。用反正法证明后一种情形是不可能的。 假设从源点假设从源点v v出发,经过红点出发,经过红点k k、老红点、老红点x x,最后到达蓝,最后到达蓝点点j j的新最短路径的新最短路径P Pvkxjvkxj的长度小于原的长度小于原D(j)D(j)。因为。因为x x比比k k先加入先加入红点集红点集S S,故,故D(x)=D(k)D(x)=D(k),又因为权
11、值非负,所以从,又因为权值非负,所以从v v到到x x的的路径路径P Pvxvx的长度不大于从的长度不大于从v v经经k k到到x x的路径的路径P Pvkxvkx的长度,即的长度,即 length(Plength(Pvkvk)=D(x)=D(k)+length(P)=D(x)=D(k)+length(Pkxkx)=length(P)=length(Pvkxvkx) )因此从因此从v v经经x x到到j j的路径长度的路径长度: : length(P length(Pvxjvxj)=length(P)=length(Pvkvk)+length(P)+length(Pxjxj) )不大于从不大于
12、从v v经经k k、x x到到j j的新路径长度的新路径长度 length(Plength(Pvkxjvkxj)=length(P)=length(Pvkxvkx)+length(P)+length(Pxjxj) )又因为又因为P Pvxjvxj中间只经过老红点,所以中间只经过老红点,所以P Pvxjvxj的长度不大于的长度不大于D(j)D(j)的值的值,由此可得:由此可得: D(j)=length(PD(j)=length(Pvxjvxj)=length(P)=length(Pvkxjvkxj) )这与新路径这与新路径P Pvkxjvkxj的长度小于原的长度小于原D(j)D(j)值的假设相矛
13、盾!因此值的假设相矛盾!因此,使得,使得D(j)D(j)值减小的新路径比必是先经过老红点到达值减小的新路径比必是先经过老红点到达k k,然,然后经过边后经过边直达蓝点直达蓝点j j的,它得长度是的,它得长度是D(k)+D(k)+边边上上的权。的权。 由此得到调整距离值的方法:当顶点由此得到调整距离值的方法:当顶点k k从蓝点集转移到从蓝点集转移到红点集时,对蓝点集扫描检查,若某蓝点红点集时,对蓝点集扫描检查,若某蓝点j j的原距离值的原距离值D(j)D(j)大于新路径的长度大于新路径的长度D(k)+D(k)+边边上的权,则将上的权,则将D(j)D(j)修改成修改成此长度值。此长度值。 为了同时
14、得到路径,设置一个路径向量为了同时得到路径,设置一个路径向量Pn,Pn,其中其中PiPi表示从源点到达表示从源点到达i i点的最短路径上该点的前驱顶点。点的最短路径上该点的前驱顶点。蓝点蓝点j蓝点蓝点k红点集红点集S源点源点vx循环循环红点集红点集k+1D0D4PP4初始化初始化44,34,3,54,3,5,14,3,5,1,2-3512max max 20 0 60max max 20 0 30max max 20 0 30max max 20 0 30max max 20 0 300 0 4 0 40 0 4 0 30 0 4 0 30 0 4 0 30 0 4 0 35010301020
15、60100 max 1 max 2 20 3 - 4 0 4 30 5 - 3 - 410301020float Dn;int Pn,Sn;DIJKSTRA(float Cn, int v) int i,j,k,v1,pre; int min,max=60,inf=80; v1=v-1; for (i=0;in;i+) Di=Cv1i; if (Di!=max) Pi=v; else Pi=0; for (i=0;in;i+) Si=0; Sv1=1; Dv1=0; for (i=0;in-1;i+) min=inf; for (j=0;jn;j+) if (!Sj)&(Djmin) min=
16、Dj; k=j; Sk=1; for (j=0;jDk+Ckj) Dj=Dk+Ckj; Pj=k+1; for (i=0;in;i+) printf(“%fn%d”,Di,i+1); pre=pi; while (pre!=0) printf(“-%d”,pre); pre=Ppre-1; 算法说明算法说明对于顶点对于顶点i i和和j j:1 1、首先,考虑从、首先,考虑从i i到到j j是否有以顶点是否有以顶点1 1为中间为中间点的路径,:点的路径,:i i,1 1,j j,即考虑图中是否有,即考虑图中是否有边边和和,若有,则新路径,若有,则新路径i i,1 1,j j的长度是的长度是Ci1
17、+C1jCi1+C1j,比较路径,比较路径i i,j j和和i i,1 1,j j,的长度,并以较短者为当前所,的长度,并以较短者为当前所求得的最短路径,。该路径是中间点序号不求得的最短路径,。该路径是中间点序号不大于大于1 1的最短路径。的最短路径。所有顶点对之间的最短路径所有顶点对之间的最短路径2 2、其次,考虑从、其次,考虑从i i到到j j是否包含顶点是否包含顶点2 2为中间为中间点的路径:点的路径:i i,.,2 2,.,j j,若没有,则,若没有,则从从i i到到j j的最短路径仍然是第一步中求出的,的最短路径仍然是第一步中求出的,即从即从i i到到j j的中间点序号不大于的中间点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本概念 存储 结构图 遍历 最小 生成 树最短 路径 ppt 课件
限制150内