给定一个图和目标节点,如何找到所有其他顶点到目标顶点的最短路径。
迪杰斯特拉算法。你可以从反向的角度去考虑,将目的地作为起点。这样可以给你任何其他节点的距离和路径。
*PS:只有一件事需要记住。在应用迪杰斯特拉算法之前,你需要先翻转边缘,并以你的目的地作为起点才能使其正常工作。
假设它是双向的,你可以从目的地开始,向外扩展。这通常被称为广度优先搜索(BFS)。
任何与目标相连的东西距离为1。任何连接到这些节点中的任何一个(尚未计算的)的距离为2。重复此过程,直到没有节点为止。
即使它不是双向的,你仍然可以通过对节点进行单次遍历来“伪造”其双向性。
无论如何,这样做的顺序是(V + E),其中V是您的节点数,E是您的边数。
O(V+E)
的澄清。我已经相应地修改了帖子。 - corsiKa为了完善上面最有帮助的答案。
在应用 Dijkstra 算法之前,您需要将图的边反转,并以目标作为起始顶点。