我读了贝尔曼福特算法。我无法理解的是为什么会有一个运行 |V|-1 次的循环(下一段中的上部循环)。
for ( i = 1; i <= V-1; i++)
{
for (j = 0; j < E; j++)
{
int u = graph->edge[j].src;
int v = graph->edge[j].dest;
int weight = graph->edge[j].weight;
if (dist[u] != INT_MAX && dist[u] + weight < dist[v])
{
dist[v] = dist[u] + weight;
}
}
我经历了几个教程。所有人都在说同样的事情,可以有最大值 |V| – 任何简单路径中的 1 条边,这就是外循环运行 |v| 的原因 – 1 次。这个想法是,假设没有负权重循环,如果我们计算了最多有 i 条边的最短路径,那么对所有边的迭代保证给出最多有 (i+1) 条边的最短路径。
那么,当 i=1 时,我在松弛方法后计算的距离,是与源的最短距离吗?
请解释一下这...