1 2 3 4 5 6 7 8 9 10 | for ( int pass = 1; pass < G.V(); pass++){ for ( int i = 0; i < G.V(); i++){ typename Graph::adjIterator adj(G, i); for (Edge<Weight>* e = adj.begin(); !adj.end(); e = adj.next()) if (!from[e->w()] || distTo[e->v()] + e->wt() < distTo[e->w()]){ distTo[e->w()] = distTo[e->v()] + e->wt(); from[e->w()] = e; } } } |
这一段代码中,循环了V-1次松弛操作,为什么每次松弛操作都是对所有点的,而前面讲解的时候说的是V-1次应该对应了从起点开始V-1步可以到达的点,感觉逻辑有点对不上。按前面讲的逻辑,应该是类似于递归的方式