Dijkstra(或其他最短路径算法),其中终端节点可以是起始节点

时间:2014-08-20 15:16:39

标签: algorithm graph-algorithm dijkstra shortest-path

Dijkstra的传统*实现并不能很好地处理这种情况。我想我已经提出了一些可行的解决方案,但它们并不是特别优雅**。这是标准解决方案的已知问题吗?

这是假设非平凡的解决方案,即类似A-> B-> C-> A的路径,而不仅仅是A-> A.

*当我说传统时,我的意思是将每个节点标记为已访问。

**存储每个节点的访问次数,并根据终端节点是否为起始节点建立终止条件。

1 个答案:

答案 0 :(得分:7)

将A拆分为两个节点,分别称为START和GOAL。

对于任何边缘A-> x,添加边缘START-> x

对于任何边y-> A,添加边y-> GOAL

保持所有其他边缘不变。

然后使用普通的Dijkstra来解决从START到GOAL的路径