给定图形和目标节点,如何找到从所有其他顶点到目标顶点的所有最短路径 .
Dijkstra的算法 . 您可以向后工作,就像您的目的地是您的起始顶点一样 . 这将为您提供到任何其他节点的距离和路径 .
假设它是双向的,你可以从目的地开始向外工作 . 这通常称为广度优先搜索(BFS) .
链接到dest的任何内容的距离都是1.链接到任何节点(尚未计算)的任何内容的距离都为2.重复直到您没有节点 .
即使它不是双向的,你仍然可以通过一次性通过节点“伪装”其双向性来轻松地做到这一点 .
无论如何,它的顺序是(V E),其中V是节点数,E是边数 .
如果你有加权边并想要最小化路径上权重的总成本,那么Dijkstra的算法是好的,但是在未加权的图中(所有边具有相同的成本),简单的广度优先搜索将成功 .
只是为了完成上面最有用的答案 .
为了使该解决方案起作用,您需要在应用Dijkstra并将目标作为起始顶点之前反转图形的边缘 .
4 回答
Dijkstra的算法 . 您可以向后工作,就像您的目的地是您的起始顶点一样 . 这将为您提供到任何其他节点的距离和路径 .
假设它是双向的,你可以从目的地开始向外工作 . 这通常称为广度优先搜索(BFS) .
链接到dest的任何内容的距离都是1.链接到任何节点(尚未计算)的任何内容的距离都为2.重复直到您没有节点 .
即使它不是双向的,你仍然可以通过一次性通过节点“伪装”其双向性来轻松地做到这一点 .
无论如何,它的顺序是(V E),其中V是节点数,E是边数 .
如果你有加权边并想要最小化路径上权重的总成本,那么Dijkstra的算法是好的,但是在未加权的图中(所有边具有相同的成本),简单的广度优先搜索将成功 .
只是为了完成上面最有用的答案 .
为了使该解决方案起作用,您需要在应用Dijkstra并将目标作为起始顶点之前反转图形的边缘 .