与有权、无权最短路径算法实现思想一样,请参考前面文章,不懂得请自行看书。
//伪代码 有权最短路径算法(有负值边)
//假设已经对表进行初始配置
void WeightedNegative(Table T)
{
//声明队列
Queue Q;
//V : 入度顶点 W : 出度顶点,与V连接的顶点
Vertex V, W;
//创建队列
Q = CreateQueue(NumVertex);
MakeEmpty(Q);
//顶点S:起始点入队
Enqueue(S, Q);
//如果Q,不为空
while(!IsEmpty(Q))
{
//顶点出队
V = Dequeue(Q);
//遍历与之连接的顶点
for each W adjacent to V
{
//如果当前路径小于顶点W的路径
if(T[V].Dist + Cvw < T[W].Dist)
{
//更新W的路径与入度
T[W].Dist = T[V].Dist + Cvw;
T[W].Path = V;
//如果顶点W不存在队列中,入队
if(!IsExist(Q, W))
{
Enqueue(Q, W);
}
}
}
}
}