当前位置: 首页 > 知识库问答 >
问题:

用BFS/DFS求有向无环图中权最大的路径

伊富
2023-03-14

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

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

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

共有1个答案

丁经略
2023-03-14

找到顶点V(在本例中是麦当劳)的最长路径可以使用拓扑排序来完成。我们可以从对节点进行拓扑排序开始,因为拓扑排序总是会返回加权路径的endpointV之前的源节点U。那么,因为我们现在可以访问一个数组,其中每个源顶点都在其所有相邻顶点之前,我们可以搜索从顶点U开始到顶点V结束的每一条路径,并在一个数组中设置一个值,该值的索引对应于U到V之间的最大边权值。如果最大距离之和超过50而不到达麦当劳,我们可以回溯并探索从U到V的第二大权重路径,如果我们用尽了从顶点U离开的所有路径,则继续回溯。最终我们将到达一个McDonalds,该McDonalds将是与原始源节点距离最大的McDonalds,而总跨越距离不超过50。

 类似资料:
  • 我试图将这个问题概念化,然后为它编写Java代码。我知道这里有一些讨论,但我没有看到很多回答者,所以我想通过写下我的想法来重申这个问题,我希望从你们那里得到一些反馈。谢谢 我的想法:对于每个叶节点,找到从根节点到它的最长路径。对于所有路径,找到最大路径长度 然而,这不就是蛮力吗,对此还有更优雅的解决方案吗? 我听说过使用Djikstra的负权重算法,但在某些地方它说这只适用于特定情况?我也看到了关

  • 本文会围绕算法中DFS求有向图或无向图两点间所有路径,先讲解DFS以及有向图或无向图的意思。 有向图在图中的边是有方向的,表现出来就是有个箭头指示方向,节点只能单向通信或传递消息,相当于单行道,无向图边没方向是双向的,边连接的两个节点有通路可以双向通信,类似于双行道。 无向图,边没有方向的图称为无向图。邻接矩阵则是对称的,且只有0和1,因为没有方向的区别后,要么有边,要么没边。 DFS作为搜索算法

  • 我能够使用这个算法在一个加权DAG中找到最长的路径(使用拓扑排序,然后放松每个边)。我现在的问题是,是否有一个算法来找到DAG的前3个最长的路径?或者,有没有实现这种算法的javascript或java库?

  • 我需要找到图中最长的路径基于边权值。对于图像上的图,它应该是4,5,3,2,1(顺序无关紧要),最好的算法是什么?如果您知道,在您的图中,每个节点都有一个对图中任何其他节点的引用(边)。算法应该改变吗?

  • 我试图用BFS找到无向加权图的单源最短路径算法。 我想出了一个解决方案,将每个边权重转换成顶点之间的x边,每个新边权重为1,然后运行BFS。我会得到一棵新的BFS树,因为它是一棵树,所以从根节点到每个其他顶点只有1条路径。 我遇到的问题是试图对以下算法进行分析。每个边都需要访问一次,然后根据其权重划分为相应数量的边。然后我们需要找到新图的BFS。 访问每条边的成本是O(m),其中m是每一条边访问一

  • 给出了一个图G=(V,E),它是正加权的,有向的,无圈的。我设计了一个在O(k(m+n))中运行的算法,用于报告从s到T的k-边最短路径。k-边最短路径定义为从s到t的具有k条边的路径,并且对于从s到t的所有路径,该路径的总权也必须是最小的。 由于BFS不能单独用于寻找最短路径(除非权重相等),我认为运行时间意味着使用BFS寻找具有k条边的路径。让我感到困惑的是k,因为我认为它意味着表演BFS k