数据结构:最短路径算法PPT格式课件下载.ppt
- 文档编号:14693837
- 上传时间:2022-10-24
- 格式:PPT
- 页数:81
- 大小:492KB
数据结构:最短路径算法PPT格式课件下载.ppt
《数据结构:最短路径算法PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《数据结构:最短路径算法PPT格式课件下载.ppt(81页珍藏版)》请在冰豆网上搜索。
贪心算法:
若顶点序若顶点序列列V0,V1,Vn是从是从V0到到Vn的最短路,则序列的最短路,则序列V0,V1,Vn-1必必为从为从V0到到Vn-1的最短路。
的最短路。
权非负的单源最短路径算法权非负的单源最短路径算法(Dijkstra)基本思想:
基本思想:
将图中所有顶点分成两组将图中所有顶点分成两组:
S,V-S一组是包括已确定最短路径的顶点的集合一组是包括已确定最短路径的顶点的集合SS,另一组是尚未确定的最短路径的顶点集另一组是尚未确定的最短路径的顶点集V-SV-S。
SS初始仅初始仅包含源包含源vv00,不断在不断在V-SV-S做贪心选择扩充集做贪心选择扩充集合合SS。
权非负的单源最短路径算法权非负的单源最短路径算法(Dijkstra)权非负的单源最短路径算法权非负的单源最短路径算法(Dijkstra)初始时初始时,S仅包含源仅包含源v0,特殊路径:
特殊路径:
从源到从源到G中某一顶点中某一顶点u且中间只经过且中间只经过SS中中顶点的路称为从源到顶点的路称为从源到u的的特殊路径特殊路径。
步骤步骤:
(1)取取v0加入加入S中中
(2)从从V-S中取出具有当前最短路径长度的中取出具有当前最短路径长度的顶点顶点w加入加入S中。
中。
v5v4v0100601010v1v3205030v2v0v1v2v3v4v5v0v1v2v3v4v5权非负的单源最短路径算法权非负的单源最短路径算法(Dijkstra)邻接矩阵邻接矩阵v0到其它各点的最短路到其它各点的最短路目标点目标点i=1i=2i=3i=4i=5v1无无v210(v0,v2)v360(v0,v2,v3)50(v0,v4,v3)v430(v0,v4)30(v0,v4)v5100(v0,v5)100(v0,v5)90(v0,v4,v5)60(v0,v4,v3,v5)Sv0,v2v0,v2,v4v0,v2,v4,v3v0,v2,v4,v3,v5Dijkstra算法:
算法:
一般情况下,一般情况下,Distk=或者或者=+设置辅助数组设置辅助数组Dist,其中每个分量其中每个分量Disti表表示示当前所求得的从源点到其余各顶点当前所求得的从源点到其余各顶点i的最短路的最短路径的长度。
径的长度。
1)在所有从源点出发的弧中选取一条权值最小的弧,)在所有从源点出发的弧中选取一条权值最小的弧,即为第一条最短路径。
即为第一条最短路径。
2)修改其它各顶点的)修改其它各顶点的Disti值。
值。
假设求得最短路径的顶点为假设求得最短路径的顶点为u,若若Distu+G.arcsuiDisti则将则将Disti改为改为Distu+G.arcsuiV0和和i之间存在弧之间存在弧V0和和i之间不存在弧之间不存在弧其中的最小值即为最短路径的长度。
其中的最小值即为最短路径的长度。
ConstP133maxvalue=99999.0maxlength=100;
TypeArr1=array1.maxlengthofinteger;
Arr2=array1.maxlength,1.maxlengthofreal;
Arr3=array1.maxlengthofreal;
Varprev:
Arr1;
c:
Arr2;
dist:
Arr3;
s:
array1.maxlengthofbooleann:
integer;
邻接矩阵,邻接矩阵,ci,jci,j为权为权distidisti当前从源到顶点当前从源到顶点ii的最短特殊路径长度(仅经的最短特殊路径长度(仅经过过SS中点)中点)到该顶点最短路径长度到该顶点最短路径长度已知的顶点集已知的顶点集SS权非负的单源最短路径算法权非负的单源最短路径算法(Dijkstra)Procedureshortpaths(n,v:
integer);
单源最短路径问题的单源最短路径问题的DigkstraDigkstra算法算法Vari,j,u:
temp,newdist:
real;
beginfori:
=1tondobegindisti:
=cv,i;
si:
=false;
if(disti=maxvalue)thenprevi:
=0elseprevi:
=v;
end;
Distv:
=0;
sv:
=true;
BCDA1043215Ex:
runthealgorithmv到到i的当前最短路径长度的当前最短路径长度初始化初始化权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)源源v加入到加入到Sprev记录记录i当前最短路的前当前最短路的前一个顶点一个顶点Fori:
=1ton-1dobegintemp:
=maxvalue;
u:
forj:
=1tondoif(notsj)and(distjtemp)thenbeginu:
=j;
temp:
=distj;
su:
Temp变量中保存的是什么值变量中保存的是什么值?
从未加入从未加入SS中的顶点中的顶点中选取当前特殊距中选取当前特殊距离最短的顶点加入离最短的顶点加入SS权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)时间复杂度时间复杂度:
O(n:
O(n22)Forj:
=1tondoif(notsj)and(cu,jmaxvalue)thenbeginnewdist:
=distu+cu,j;
if(newdistdistj)thenbegindistj:
=newdist;
prevj:
=u;
endendendend;
放松步放松步/放松步放松步uu是新加入是新加入SS的顶点的顶点,计算计算uu的所有相邻顶点的特殊距的所有相邻顶点的特殊距离。
若比原距离小,则用新距离离。
若比原距离小,则用新距离代替,并让代替,并让uu做为最短路径上的做为最短路径上的点点权非负的单源最短路径算法权非负的单源最短路径算法(Dijkstra)23411043215Ex:
runthealgorithmSudist2dist3dist41-105maxvalue1,339561,3,448561,3,4,22856IfDistu+cu,jdistjthendistj=distu+cu,jprevj=u权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)基于邻接表的算法(当图边数远小于基于邻接表的算法(当图边数远小于|V|2时采用)时采用)P136Constmaxint=2147483647maxlength=1000Typepointer=adjnode;
/邻接表adjnode=recordv:
/顶点标号w:
/权next:
pointer;
/指向下一邻接点指针end;
Arr1=array1.maxlengthoflongint;
Arr2=array1.maxlengthofinteger;
Arr3=array1.maxlengthofpointer;
Vardist:
/特殊距离prev:
/i的前一节点adj:
/邻接表from,tto,n,e:
/源,目标,节点数,边数FunctionDeleteMin:
integer;
/取当前负距离最大(正距离最小)的顶点Vari,k:
longint;
begink:
=-maxint;
fori:
=1tondoif(distitemp)thenbegintemp:
=disti;
k:
=i;
DeleteMin:
=k;
End;
权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)负距离最大,负距离最大,正距离则最小正距离则最小Functionshortpath(from,tto:
integer):
boolean;
Vari,k:
p:
empty:
boolean;
previ:
=from;
/源点distk:
/源点距离empty:
权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)初始化当前距离为某一较小负整数初始化当前距离为某一较小负整数,disti0表示表示iS,省略数组省略数组SS节点节点ii加入加入SS后,后,distidisti=-=-distidisti,变为正距离。
变为正距离。
while(notempty)do还有顶点未被加入还有顶点未被加入S或未到目标顶点或未到目标顶点Beginp:
=adjk;
while(pnil)dobeginif(distp.v0)and(distp,v-(dsitk+P.w)thenbegindistp.v:
=-(distk+p.w);
prevp.v:
=p.next;
权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)KK的第一个邻接点的第一个邻接点PP放松步放松步KK的下一个邻接点的下一个邻接点逐一考察逐一考察KK的所有邻接点,执行放松步的所有邻接点,执行放松步未加入未加入SSk:
=deletemin;
/取当前负距离最大(正距离最小)点作为取当前负距离最大(正距离最小)点作为SS中的点,中的点,If(k=0)or(k=tto)thenempty:
/找不到当前特殊路径距离找不到当前特殊路径距离更小的顶点更小的顶点或到到目标节点或到到目标节点distk:
=-distk;
/kk加入加入SSEnd;
Shortpath:
=(k=tto);
权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)23411043215Ex:
runthealgorithmkdist2dist3dist41-10-5-maxint3-95-64-8562856IfDistu+cu,idistithendisti=-(distu+cu,i)previ=uDeleteMin放松步放松步empty:
权非负的单源最短路径算法(权非负的单源最短路径算法(Dijkstra)有向无环图最短路径有向无环图最短路径Dire
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 路径 算法
