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

一条边归零的最短路径

汝墨一
2023-03-14

给出一个无向加权图G和两个顶点:开始顶点和结束顶点

什么是最有效的算法,找到从开始到结束的最短路径,并能够将恰好一条边的权重变为零?

编辑:我知道dijkstra算法,但正如我所说,在这个问题中情况不同:我们可以将一条边变为零,

共有1个答案

葛昕
2023-03-14

您可以在两倍大小的扩充图上使用Djikstra的算法来解决这个问题。

假设你有1.n个顶点。

定义一个新的图,使得对于原图中权重为w的每条边a->b,定义权重为w的边a->b,权重为0的边a->b+n,权重为w的边a+n->b+n。

 类似资料:
  • 给定:有向加权图G(V,E)和是的顶点,除边为负外,所有边均为正。 问题:找到从s到t的最短路径(意思是:重量最小)。 我的解决方案是:因为我们有一个负优势,我们应该使用贝尔曼·福特的算法。在边缘执行“松弛”,如果在的第次迭代中出现问题,则有一个循环-因此返回false。否则,返回从到的最短路径。 另一个解决方案:使用Dijkstra,通过保存d(u)和传递负边(u,v)并执行“松弛”来稍微改变它

  • 我有一组原点-终点坐标,我想计算它们之间的最短路径。 我的出发地坐标有时位于一条长直线道路的中间。然而,由OSMNX/NETWorkX计算的最短路径将不考虑中间边缘到最近的节点路径。 OSMnx或networkx中是否有任何现成的函数,我可以使用它来找到在道路中间起点/终点的最短路径? 如果没有这样的功能,我会考虑使用以下步骤。 获取起点和终点的最近边 获取这些最近边的节点:假设(a,b)为起点,

  • 我做了一个递归算法来找到迷宫的解决方案,格式如下 其中一个“#”代表一堵墙,“#”代表一个开放空间(可以自由移动)。”S'代表开始位置,E'代表结束位置。 我的算法运行得很好,但我想知道如何修改它以获得最短路径。 在第一个街区,我找到了那条路并把它打开。还设置了写有路径的char[][]数组,该数组随后作为结果打印出来。 它工作得很好,但是我想知道什么是最好的方法来修改它,使它在找到第一条成功的路

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

  • 主要内容:最短路径算法在给定的图存储结构中,从某一顶点到另一个顶点所经过的多条边称为 路径。 图 1 图存储结构 例如在图 1 所示的图结构中,从顶点 A 到 B 的路径有多条,包括 A-B、A-C-B 和 A-D-B。当我们给图中的每条边赋予相应的权值后,就可以从众多路径中找出总权值最小的一条,这条路径就称为 最短路径。 图 2 无向带权图 以图 2 为例,从顶点 A 到 B 的路径有 3 条,它们各自的总权值是:

  • 最近,我一直在尝试编写一些递归迷宫代码,它可以返回迷宫中的最短路径。如果迷宫中没有路径,那么代码将返回-1。 例如,对于董事会: 其中S是迷宫的起点,W代表一堵墙,X代表所需的目的地,和-代表一个可用的路径点。输出将是: 对于董事会: 输出将是 这一切都是通过一个board类实现的,该类接受一个字符串和迷宫的尺寸,一个返回最短路径的检查函数,以及一个返回最短路径的win函数,如果没有路径,则返回-