先分析Dijkstra算法的本质要求:

1. 有最优子结构 

2. 函数Len(s, v0, v1, ..., vk)定义了路径(s, v0, v1, ..., vk)的长度,要求任选一点vk+1属于V,则Len(s, v0, v1, ...,vk, vk+1) >= Len(s, v0, v1, ..., vk)

   即以路径的角度来看Len是单调递增的; 

 

 

方法1:

边的权重设置为w(u,v)=1/r[u,v], 求最短路径,路径长度的定义为Len(s, v0, ... ,vk) = w(s,v0)*w(v0,v1)*...*w(vk-1,vk), Len(s)=1; 松弛的时候使用乘法

 

方法2:

边的权重设置为w(u,v)=-log(r[u,v]), 然后求最短路径, 路径长度的定义为Len(s, v0, ... ,vk) = w(s,v0)+w(v0,v1)+...+w(vk-1,vk), Len(s)=0

posted on 2012-07-29 10:49  ellusak  阅读(1148)  评论(0编辑  收藏  举报