最短路问题算法精品文稿.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《最短路问题算法精品文稿.ppt》由会员分享,可在线阅读,更多相关《最短路问题算法精品文稿.ppt(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、最短路问题算法第1页,本讲稿共13页分析:设G=(V,E)是一个有向图,它的每一条边(U,V)都有一个权W(U,V),在G中指定一个结点V0,要求把从V0到G的每一个结点Vj(V)的最短有向路找出来(或者指出不存在从V0到Vj的有向路,即V0不可达Vj)。这个问题即为单源最短路问题。解决单源最短路径的基本思想是把图中所有结点分为两组,每一个结点对应一个距离值第一组:包括已确定最短路径的结点,结点对应的距离值是由v0到此结点的最短路径长度;第二组:包括尚未确定最短路径的结点,结点对应的距离值是v0经由第一组结点(中间结点)至此结点的最短路径长度;我们按最短路径长度递增的顺序把第二组的结点加到第一
2、组中去,直至v0可达的所有结点都包含于第一组。在这个过程中,总保持从v0到第一组各结点的最短路径长度都不大于从v0至第二组任何结点的路径长度。具体作法是:初始时v0进入第一组,v0的距离值为0;第二组包含其它所有结点,这些结点对应的距离值这样确定(设vi为第二组中的结点)然后每次从第二组的结点中选一个其距离值为最小的结点vm加到第一组中。每往第一组加入一个结点vm,就要对第二组的各结点的距离值作一次修正(设vi为第二组的结点):若加进vm做中间结点使得v0至vi的路径长度更短(即vi的距离值vm的距离值+Wmi),则要修改vi的距离(vi的距离值vm的距离值+Wmi)。修改后再选距离值最小的一
3、个结点加入到第一组中,。如此进行下去,直至第一组囊括图的所有结点或再无可加入第一组的结点存在。显然,这种从第二组的结点中选距离值最小的结点扩展是一种贪心策略。第2页,本讲稿共13页设 n图的结点数;adj有向图的相邻矩阵。其中 dist最短路径集合。其中 distipre在v0至vi的最短路径上,vi的前趋结点序号;distilengthv0至vI的最短路径长度,即vi的距离值;(1in)Const n=图的结点数;Type path=record 路径集合的结点类型 length:real;距离值 pre:0n;前趋结点序号 end;var adj:array1n,1n of real 相邻
4、矩阵 dist:array1n of path;路径集合第3页,本讲稿共13页计算单源最短路径的过程如下:fillchar(adj,sizeof(adj),0);建立相邻矩阵adj for i1 to n do for j1 to n do if(i,j)E then adji,jwij else adji,j;for i1 to n do 路径集合初始化 begin distilengthadjv0,i;if distilength then distiprev0 else distipre0;end;for adjv0,v01;源结点v0进入第一组repeat min;u0;for i1
5、to n do 从第二组中找距离值最小的结点u if(adji,i=0)and(distilengthmin)then begin ui;mindistilength;end;thenif u0 第二组中存在一个距离值最小的结点 then begin adju,u1;结点u进入第一组 for i1 to n do 修正第二组中u可达的结点距离值 if(adji,i=0)and(distilengthdistulength+adju,i)then begin distilengthdistulength+adju,i;distipreu;end;then end;then until u=0;第
6、4页,本讲稿共13页算法结束时,沿着结点vi的pre指针回溯,便可确定v0至vi的最短路径:procedure print(i:integer);begin if i=v0 then 输出结点v0 else begin print(distipre);输出结点i和v0至vi的最短路径长度distilength;end;else end;print显然递归调用print1,printn后,可得知v0至所有结点的最短路径。由此得出主程序:输入城镇数n;输入出发城镇序号v0;输入城镇间的距离矩阵w;计算单源最短路径方案dist;for i1 to n do 枚举除v0外的其它城镇begin if(i
7、v0)and(distilength)若城镇i与城镇v0间有通路,则输出它们之间的最短距离和路径方案then begin wrtiln(distilength);print(i);end;thenwrteln;end;for第5页,本讲稿共13页位图位图给定一个n*m的矩形位图,位图中的每个像素不是白色就是黑色,但至少有一个是白色的。第i行、第j列的像素被称作像素(i,j)。两个像素p1=(i1,j1),p2=(i2,j2)之间的距离定义为:d(p1,p2)=|i1-i2|+|j1-j2|。现在请你计算图中每个像素与离其最近的“白像素”的距离。【输入输入】输入文件BIT.IN的第一行包含两个整
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 短路 问题 算法 精品 文稿
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内