可以修改 BFS 以搜索具有负权重边的图吗?
Can BFS be modified to search a graph with negative weighted edges?
我已经编写了一个 DFS 算法,它可以找到图中顶点之间的路径,但想将其优化为 return 包含最少边数的路径。
我只想切换到 BFS 算法,但我不确定我需要如何修改它,因为我的图形的属性和结果路径必须满足的标准。
图表:
无向、带权且包含权重为正、负、权重为0的边。
路径:
不能多次访问任何顶点。路径的总权重必须始终为正,包括到路径末端顶点之前的任何顶点的路径。
权重可以看作是使用每条路径的成本,总权重可以看作是可用的数量。正权重增加了可用的数量,负权重消耗了它们的权重。
任何帮助将不胜感激,谢谢!
BFS 适用于未加权的图(或所有边具有相同权重的图)。
对于加权图,可以使用诸如 Dijkstra's (which is a "modified BFS"), or A*(这是“修改后的 Dijkstra's”)之类的算法。
然而,Dijkstra 或 A* 都不能正确处理负权重。
对于具有负权重的图,请考虑
Bellman–Ford algorithm.
编辑:如果你只想使用最少数量的边同时保持
Total weight of the path must always be positive including the path up
to any vertex before the vertex of the end of the path.
您可以使用 BFS 并将权重用作选择标准,这意味着在将边缘添加到队列之前进行检查。如果添加它会使总重量为负,则不要添加它。
我已经编写了一个 DFS 算法,它可以找到图中顶点之间的路径,但想将其优化为 return 包含最少边数的路径。
我只想切换到 BFS 算法,但我不确定我需要如何修改它,因为我的图形的属性和结果路径必须满足的标准。
图表: 无向、带权且包含权重为正、负、权重为0的边。
路径: 不能多次访问任何顶点。路径的总权重必须始终为正,包括到路径末端顶点之前的任何顶点的路径。
权重可以看作是使用每条路径的成本,总权重可以看作是可用的数量。正权重增加了可用的数量,负权重消耗了它们的权重。
任何帮助将不胜感激,谢谢!
BFS 适用于未加权的图(或所有边具有相同权重的图)。
对于加权图,可以使用诸如 Dijkstra's (which is a "modified BFS"), or A*(这是“修改后的 Dijkstra's”)之类的算法。
然而,Dijkstra 或 A* 都不能正确处理负权重。
对于具有负权重的图,请考虑
Bellman–Ford algorithm.
编辑:如果你只想使用最少数量的边同时保持
Total weight of the path must always be positive including the path up to any vertex before the vertex of the end of the path.
您可以使用 BFS 并将权重用作选择标准,这意味着在将边缘添加到队列之前进行检查。如果添加它会使总重量为负,则不要添加它。