【问题标题】:Can BFS be modified to search a graph with negative weighted edges?可以修改 BFS 以搜索具有负加权边的图吗?
【发布时间】:2021-10-01 00:43:06
【问题描述】:

我编写了一个 DFS 算法,它在图中找到顶点之间的路径,但想对其进行优化以返回包含最少边数的路径。

我只想切换到 BFS 算法,但鉴于我的图形属性和结果路径必须满足的条件,我不确定我需要如何修改它。

图表: 无向、加权并包含具有正权重、负权重和权重为 0 的边。

路径: 不能多次访问任何顶点。路径的总权重必须始终为正,包括到达路径末端顶点之前的任何顶点的路径。

可以将权重视为使用每条路径的成本,将总权重视为可使用的数量。正权重会增加可用的数量,而负权重会消耗它们的权重。

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: java breadth-first-search weighted-graph


    【解决方案1】:

    BFS 适用于未加权的图(或所有边具有相同权重的图)。
    对于加权图,可以使用诸如Dijkstra's(这是“修改后的 BFS”)或 A*(这是“修改后的 Dijkstra's”)之类的算法。
    然而,Dijkstra 或 A* 在负权重下都不能正常工作。
    对于具有负权重的图,请考虑 Bellman–Ford algorithm.

    编辑:如果您只想使用最少的边数同时保持

    路径的总权重必须始终为正,包括向上的路径 到路径末端顶点之前的任何顶点。

    您可以使用 BFS 并将权重用作选择标准,这意味着在将边添加到队列之前进行检查。如果添加它会使总重量为负,请不要添加它。

    【讨论】:

    • 感谢您的回复!我确实简要地查看了贝尔曼福特,但它似乎不适用于我想要实现的目标。权重是次要的,只要路径中任何点的权重总和 >= 0,就不需要优化。我正在尝试最小化路径使用的边数,就像通过BFS,但还要确保基于边的权重,最短路径的总权重不会在路径中的任何点变为负值。因为 BFS 通过创建生成树来工作,所以我认为我无法修改它来实现我想要做的事情。
    猜你喜欢
    • 2022-01-14
    • 2015-03-19
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多