和无权最短路径算法同理,伪代码,代码已加注释,思路很清晰,不理解的地方请自行看书。
//伪代码 Dijkstra算法 -- 有权最短路径算法(无负值边)
//假设已经根据图生成了用于Dijkstra算法的初始配置表
void Disjkstra(Table T)
{
//V : 入度点 W : 出度点(与V连接的顶点)
Vertex V, W;
while(true)
{
//寻找最小路径并且未被处理的顶点
V = FindSmallestDistVertex();
//如果不存在该顶点,方法结束
if(V == NotAVertex)
{
break;
}
//状态改为已被处理
T[V].Known = True;
//遍历与之关联的顶点
for each W adjacent to V
{
//如果该顶点未被处理
if(!T[W].Known)
{
//如果入度顶点路径+当前入度顶点V到出度顶点W的路径长小于当前顶点路径长
if(T[V].Dist + Cvw < T[W].Dist)
{
//更新顶点W的路径长
Decrease(T[W].Dist to T[V].Dist + Cvw);
//更新入度顶点
T[W].Path = V;
}
}
}
}
}