通常,Dijkstra的算法找出从一个节点到另一节点的最短距离。
但是它可以计算出通过每个其他节点到达一个节点到另一个节点的最短距离吗?我需要它先到达其他节点,再到达末端节点。
如何使用Dijkstra算法将其应用于无向图,还是不可能?
答案 0 :(得分:1)
描述的问题是Travelling salesman problem(TSP)的变体。这个问题是NP难题。暴力解决方案的时间复杂度为 O(n!)。使用动态编程,您可以实现时间复杂度为 O(n 2 2 n )。有多种启发式方法可以在多项式时间内获得最佳解。
Dijsktra的算法将选择找到的每个新节点的最短路径,这可能不是旅行商问题的最佳解决方案。作为反例,请考虑一个图,该图将路径非常短的节点连接到除结束节点之外的每个节点。想象一下从倒数第二个节点到末端节点的最短路径非常大,因此最好在中间节点之间采用中间非最短路径以到达末端节点。