Algorithm 是否存在通过一组顶点U的最短路径

Algorithm 是否存在通过一组顶点U的最短路径,algorithm,graph-theory,shortest-path,breadth-first-search,Algorithm,Graph Theory,Shortest Path,Breadth First Search,问题是在有向图中寻找两个顶点之间的最短路径 将输入u中顶点u的边转换为两条边,并将输入非u顶点的边转换为三条边,有效地使通过u顶点的路径比非u顶点的路径短。如果存在一条长度相等的最短路径,它穿过u中的所有u 其思想是,然后运行BFS算法一次,并检查最短路径是否包含u中的所有边,以及是否与s和t之间的最短路径长度相等,同时考虑所有相乘的边 编辑:对不起,忘了问这个问题了,这个算法正确吗?你的算法思想是可行的。也就是说,您运行BFS以找到最短路径,然后在经过修改的图形上再次运行BFS,这样可以更好地

问题是在有向图中寻找两个顶点之间的最短路径 将输入u中顶点u的边转换为两条边,并将输入非u顶点的边转换为三条边,有效地使通过u顶点的路径比非u顶点的路径短。如果存在一条长度相等的最短路径,它穿过u中的所有u

其思想是,然后运行BFS算法一次,并检查最短路径是否包含u中的所有边,以及是否与s和t之间的最短路径长度相等,同时考虑所有相乘的边


编辑:对不起,忘了问这个问题了,这个算法正确吗?

你的算法思想是可行的。也就是说,您运行BFS以找到最短路径,然后在经过修改的图形上再次运行BFS,这样可以更好地通过U。但是您描述的修改方式可能会改变最佳路径

问题就在这里。假设P1是一条最好的路径,有更多的步骤通过整个U,而P2是一条好的路径,从U到U经过一个昂贵的跳跃,在更改P1之前可能比P2好,但在更改权重之后,P2比P1好。所以你第二次发现P2,它没有穿过所有的U,你错误地得出结论,P1不存在


要解决此问题,您必须为进入/离开U设置固定奖励。所有边权重的变化相同。现在一条路径通过的U节点越多越好,但你没有改变通过相同数量的U节点的两条路径的相对值。现在你的推理没有问题。

OP这里,我在发布问题后已经设法证明了算法

证明:

如果存在最短路径P1、P2、P3…Pn,则在通过将进入非U顶点的边乘以3和进入U顶点的边乘以2来扩充图之后,我后来意识到扩充可以是2和1。最短路径的长度将是: 3*| Pi |-|{u | u in Pi}

路径中的边数乘以3减去路径中以U为单位的顶点数

显然,现在最短路径是使3*| Pi |-|{u | u in Pi}最小的路径|

但是3*| Pi |是所有最短路径的常数,所以我们实际上想要最大化|{u | u in Pi}


这意味着我们要通过u中尽可能多的顶点,因此如果使用BFS并恢复最短路径,我们发现它不包含u中的所有顶点,我们当然可以说这样的路径不存在,如果我们发现有一条路径穿过U中的所有顶点,我们必须检查它的长度,在将它还原为原始图中的路径后,我们可以简单地检查它的长度是否是s和t之间最短路径的长度如果是,那么它是一条穿过U中所有顶点的路径,并且是一条最短路径,如果不是,那么很明显不是。

那么,你的问题是什么?我看不到问号,只是想法/概念。你知道它看起来是什么样的方法吗?我修正了这个帖子。我不完全理解你的想法,但它似乎不正确。通过基本上调整边的权重,可以使路径更有可能通过U,但没有任何保证。欢迎使用StackOverflow。请按照创建此帐户时的建议,遵循帮助文档中的过帐指导原则,和在这里申请。你是对的,我问这个问题是因为这是一个测试中的问题,我认为我回答正确,但讲师决定给它评分2/20分,在测试中我确实提到了恢复路径的长度,这非常重要,但我忘了在这篇文章中这样做。