Dijkstras算法 - 父节点?

时间:2012-11-08 21:51:44

标签: algorithm graph theory

我的教授希望我们为单个源节点实现它到网络中的所有其他节点。他说要通过使用父节点来跟踪最短路径,但我不知道这在算法的上下文中意味着什么。

我可以或多或少地正确实现我的代码,因为我的输出距离对于我运行它的任何网络都是正确的。

但是大多数在线资源都会讨论访问节点并在探索所有相邻节点后将其标记为已访问。因此,例如,如果节点A和B与节点C相邻,并且到A的新距离小于B的距离,我是否将节点C标记为已访问?然后,如果我到达节点A并意识到它导致我失败的路径实际上会导致已记录的距离实际上更大,会发生什么?

2 个答案:

答案 0 :(得分:2)

为了从Dystra的算法获得路径(而不仅仅是成本),而不是为每个节点保存最佳成本,保存该对(best_cost,from_where)。 from-where是生成best_cost的相邻节点的句柄。

然后,您可以按照from_where指针一直返回原点以获得最佳路径。我怀疑“父”是他在2元组/对中的from_where元素的名字。

答案 1 :(得分:0)

  

我的教授希望我们为单个源节点实现它到网络中的所有其他节点。他说要通过使用父节点来跟踪最短路径,但我不知道这在算法的上下文中意味着什么。

嗯,这只是意味着对于每个节点,您在最短的路径中存储哪个节点是它来自哪个节点。这样,一旦完成算法,您可以以相反的顺序走最短路径,不仅可以找到最短路径的距离,还可以找到最短路径本身。

  

但是大多数在线资源都会讨论访问节点并在探索所有相邻节点后将其标记为已访问过。

在标记为具有最低距离的未访问节点之后,标记所访问的节点。除非存在负距离,否则您将无法找到距离较远的路径(即使如此,如果图形的距离小于零,则只会出现问题。)