两个顶点之间的最短路径

时间:2019-08-05 16:10:54

标签: shortest-path

我得到一个图,并要求我找到两个顶点之间的最短路径。我们必须访问所有顶点,或者如果我们在不访问所有其他顶点的情况下到达目标顶点是正确的? 谢谢,抱歉造成您的不便。

这是图形: graph

问题是: 应用最短路径算法查找从A到G的最短路径。

2 个答案:

答案 0 :(得分:0)

在未加权图中两个顶点之间的最短路径的通常策略是Breadth-First Search(BFS),它访问从起点到距离1的每个节点,然后访问距离2的每个节点...直到它找到目标顶点。

前提很简单:通过访问距起点越来越远的每个节点,到终点的路径必须是最短的路径,因为否则您会早先找到它。举一个更具体的例子:如果找到的第一个路径是距离4,则该路径必须是最短路径,因为您已经检查了距离3或更短的所有路径。

因此,要在未加权图中找到两个顶点之间的最短路径,可以进行BFS,直到找到目标顶点,然后回溯到起始顶点,跟踪您遍历的节点。保证这是最短的路径(或并列为最短的路径)。

如果对图形进行加权(未指定),则必须遍历到目标节点的所有可能路径,而不仅仅是遍历最少顶点的路径。

答案 1 :(得分:0)

作为Clayton L的补充,如果图形被加权(但具有非负权重),则可以使用Dijkstra的算法。如果使用负权重加权但不包含负周期,则可以使用Bellman-Ford。如果确实包含负周期,那么您就不走运了,您需要从某种意义上改变权重,因为路径可以利用负周期并将路径的权重设为任意负数。