繁体   English   中英

使用 BFS/DFS 寻找有向无环图中权重最大的路径

[英]Using BFS/DFS To Find Path With Maximum Weight in Directed Acyclic Graph

你有一辆 2005 年的本田雅阁,油箱里还剩 50 英里(最大重量)。 您可以在 50 英里半径范围内访问哪些麦当劳位置(图形节点)? 这是我的问题。

如果您有一个加权有向无环图,您如何找到在给定权重限制内可以访问的所有节点?

我知道 Dijkstra 的算法,但除了最小路径问题之外,我似乎找不到任何关于其使用的文档。 在我的示例中,没有特别要结束的节点,我们只想在不超过最大权重的情况下尽可能地 go。 似乎您应该能够使用 BFS/DFS 来解决这个问题,但是我找不到在具有边权重的图中实现这些的文档(同样,在最小路径问题之外)。

可以使用拓扑排序来找到到顶点 V(在本例中为麦当劳)的最长路径。 我们可以从拓扑排序我们的节点开始,因为拓扑排序总是会在加权路径的端点 V 之前返回源节点 U。 然后,由于我们现在可以访问一个数组,其中每个源顶点都在其所有相邻顶点之前,我们可以搜索从顶点 U 开始并以顶点 V 结束的每条路径,并在数组中设置一个值,其索引对应于U 到我们发现连接 U 到 V 的最大边权重。如果最大距离的总和超过 50 没有到达麦当劳,我们可以回溯并探索从 U 到 V 的第二高权重路径,如果我们用尽所有从顶点 U 退出的路径。最终我们将到达一个麦当劳,这将是与我们原始源节点的最大距离同时保持总跨越距离小于 50 的麦当劳。

对于这个问题,您需要从起始节点运行 DFS。 从起始节点的每个子节点向下递归图,直到达到超过 50 的总权重。 如果沿着遍历记录遇到麦当劳,则在列表或集合中到达节点。 通过这样做,您将获得最有效的算法,因为您不必像该问题的其他答案所建议的那样创建完整的拓扑排序。 尽管该算法在技术上仍然在 O(ElogV) 时间内运行,但通过在达到超过 50 的路径距离时在 DFS 上递归,您可以避免在不需要时遍历整个图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM