单源最短路径算法涉及到松弛技术。
对于每个结点v来说,我们用一个属性p(v)来记录,从源节点
到节点v的最短路径权重的上界,称此属性为s到v的最短
路径估计。
松弛操作
对一条边(u,v)来说,在边(u,v)上的松弛操作为,
比较p(v)与p(u)加上边(u,v)的权重。如果当前最短路
径权重上界大于新值,则更新,最短路径估计。
以节点数为5的图,源节点为0为例,如图所示
松弛操作C代码
void relax(int u,int v,graphpoint g,int x)
{
if(cost[x][v] > cost[x][u] + value[u][v])
{
cost[x][v] = cost[x][u] + value[u][v];
g[v].parent = u;
}
}
x用传入源节点