【问题标题】:How to find the shortest path from vertice v to vertice w for an undirected edge-weighted graph?对于无向边加权图,如何找到从顶点 v 到顶点 w 的最短路径?
【发布时间】:2019-10-06 19:37:41
【问题描述】:

给定一些无向和边加权图,可以使用什么算法来找到从某个顶点 v 到另一个顶点 w 的最短路径?

对于有向边加权图,您可以使用 Dijkstra 的最短路径算法,但我正在使用无向图,所以它不起作用。

对于非边加权图,您可以使用广度优先搜索 (BFS),但我正在使用边加权图,所以它不起作用。

那么考虑到它既是无向的又是边加权的,那么一般的最短路径法是什么?

【问题讨论】:

  • 是什么让您认为您不能将 Dijkstra 算法用于无向图?
  • @mangusta 在我正在阅读的书中(Sedgewick 的算法第 4 版)中,关于最短路径的部分提出了专门针对有向图的 Dijkstra 算法。他们的主张:Dijkstra 算法解决了具有非负权重的边加权有向图中的单源最短路径问题。
  • 作者可能将无向图视为具有边 i -> jj -> i 的有向图,因为每对 (i , j) 之间都有一条无向边
  • @mangusta 我在网上几乎找不到任何与 Dijkstras 一起提到无向图的资源。无论哪种方式,是否可以修改广度优先搜索以在找到最短路径时考虑边缘权重?
  • 当然不是。您可以将 Dijsktra 算法用于一般的无向图。

标签: shortest-path undirected-graph


【解决方案1】:

Dijkstra 的单源最短路径算法可应用于无向图和有向图。唯一的规定是边缘权重必须是非负的。 从图中的单个顶点 v 开始,将 v 弹出到集合 S 中。该算法检查不在 S 中的每个相邻顶点,选择权重最小的边,并将该顶点弹出到 S 中。从顶点 v 到S 中的每个相邻顶点都根据边权重进行更新。一旦遍历了整个图,就确定了每个节点之间的最短路径。

示例:https://brilliant.org/wiki/dijkstras-short-path-finder/

此外,在加权边图上执行 BFS 被证明是难以处理的。有关推理,请参阅此post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多