具有负权的最短路问题求解过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

具有负权的最短路算法
给每一个点一个标号,标号由两部分组成。

后一部分表示从起点到该点的临时最短距离;前一部分表示从起点到该点的临时最短路线上的前一点。

我们每进行一轮,都去修改标号中的值,直到进行到某一轮,所有标号中的值都不发生变化了,就得到了起点到各个点的最短距离和最短路线。

在这里,设d(t)(v s,v j)为第t轮由起点v s到点v j的临时最短距离。

(t可以理解为第t轮,也可以理解为temporary 的第一个字母t,表示临时的意思)
(1)令第1轮的临时最短距离为:
d(1)(v s,v j)=ωsj;
(2)求解第2轮中从起点v s到点v j的临时最短距离d(2)(v s,v j)。

对于点v j,计算
d(2)(v s,v j)=min i{d(1)(v s,v i)+ωij}
也就是说从v s到v j可以分2步走,第一步,先从v s到v i,第二步,从v i到v j。

因此,假如一个图有n个点,对每一个点就有n种路线可选择,我们在这n种路线中找出距离最短的作为该点的临时最短距离。

在每一轮中,我们都需要计算(n-1)n次才能够找到从起点到每一个点的最短距离(起点不需要计算),假如一个有
向图包含的点很多时,计算量将很大。

由于当v i和v j之间不存在弧时,ω
=∞,因此我们只需
ij
找出终点在该点的所有弧,用所有弧的弧长加上这些弧的起点的临时最短距离,其中的最小者如果比该点的标号值小,就设为该点新的临时最短距离;
对于第t轮中从起点v s到点v j的临时最短距离为d(t)(v s,v j),则对于点v j,有
d(t)(v s,v j)=min i{d(t-1)(v s,v i)+ωij}
当进行到第k轮时,所有点的标号经过计算都不再发生变化时,即
d(k)(v s,v j)= d(k-1)(v s,v j)
就得到了起点v s到各点的最短路距离。

相关文档
最新文档