【问题标题】:Directed graph with non negative weights (adjacency matrix)具有非负权重的有向图(邻接矩阵)
【发布时间】:2015-12-17 19:28:46
【问题描述】:

首先,我为我糟糕的图表绘制道歉。权重显然没有缩放。我很难想出解决一些问题的算法。

首先,我想找到从 C 到 C 需要 3 个“停止”或更少的所有路径(只是一个示例......可以是任意两个顶点)。经过研究,我发现 BFS 可能是我正在寻找解决这个问题的方法。我的假设是否正确?

有 3 站或更少的两条路径:

C -> D -> C

C -> E -> B -> C

我还想找到从 A 到 C 的最短路径(只是一个例子……可以是任意两个顶点)。在做了一点研究之后,我得出了我应该使用 Dijkstra 算法的结论。我在这个假设中正确吗?如果是这样,我看到有各种实现。我使用二进制堆、斐波那契堆还是队列有关系吗?

谢谢,如果您需要更多信息,请告诉我!

【问题讨论】:

    标签: java graph dijkstra directed-graph breadth-first-search


    【解决方案1】:

    首先,我想找到从 C 到 3 个“停止”或更少的所有路径 C(只是一个例子......可以是任何两个顶点)。经过研究,我 发现 BFS 可能是我正在寻找解决此问题的方法。是 我纠正了这个假设?

    是的,你是。 BFS 的特性是按级别顺序处理节点,因此您首先处理与源节点相邻的所有节点,然后处理与源节点相邻的节点等。

    我也想找到从 A 到 C 的最短路径(只是一个例子.. 可以是任意两个顶点)。经过一番研究,我来了 得出我应该使用 Dijkstra 算法的结论。我对么 在这个假设中?如果是这样,我看到有各种 实施。如果我使用二进制堆,斐波那契堆,这有关系吗? 还是排队?

    同样,是的,Dijkstra 算法是解决此类问题的经典解决方案。还有其他算法更适合某些特殊情况(例如,如果您的图表中有负权重,则使用 Bellman-Ford),但在大多数情况下(您的情况也是如此),请使用 Dijkstra。关于实现,理论上最好的实现是基于斐波那契堆实现的最小优先级队列。此实现的运行时间为O(|E|+|V|/log|V|)(其中|V| 是顶点数,|E| 是边数)。然而,在实践中,二叉堆的性能通常优于斐波那契堆,请参阅this interesting thread 了解更多信息。

    【讨论】:

    • 这是查找“从 C 到 C”的所有路径的正确方法吗?每次我们找到到 C 的“后沿”时,从 C 开始 DFS 并输出路径?
    • @mangusta 不确定。 DFS 与 BFS 非常相似,是一种用于图遍历的算法,而不是用于查找 所有 路径的算法。但是,如果您引入对路径长度的约束,则可以避免将节点标记为已访问,从而找到一定长度的所有路径。如果没有该约束并且没有将节点标记为已访问,您将陷入无限循环。
    • @mangusta 我对此进行了更多思考。使用 DFS 是可能的,但是为了获取所有路径,您必须在递归调用之后从访问列表中删除节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2022-07-10
    相关资源
    最近更新 更多