检查从顶点v到另一个顶点w的所有路径是否具有相同的长度

时间:2017-05-25 12:53:07

标签: java algorithm graph graph-algorithm

我有一个连接图g,其n个顶点和m边。

每条边都可以从两个方向穿过,同时在一个方向上穿过它们,它们的重量是正的,在另一个方向上横穿它们,它们的重量是负的。

因此对于每个边u - >权重为v的{​​{1}}存在边w - >权重为v的{​​{1}}。

我的目标:

对于给定的顶点u,检查是否存在返回-w的路径(一个循环),以使该路径的边权重之和不等于v 。如果存在这样的路径,则输出这种路径的最小边数,否则输出v

示例:

0"all cycles are fine"的所有路径总计为v的示例。输出为v

Example 1

存在从0"all cycles are fine"的路径的示例,其边缘总和为不等于v的值。在此示例中,此路径的最小边数为4:

Example 2

我目前的做法:

问题似乎等同于检查从给定顶点v到任何其他顶点0的所有路径是否具有相等的长度,如果这是真的那么"所有循环都很好& #34;否则我输出破坏条件的最短周期的长度。我很难找到一种有效的算法来测试这种情况。

1 个答案:

答案 0 :(得分:3)

检查是否存在"错误循环的简单算法"通过顶点A的是从A运行BFS,然后以不同的成本查看哪些顶点B至少访问了两次。如果不存在B,那么所有循环都是好的,否则存在大小不良的循环(直到第一次访问B的边缘)+(边缘直到以不同的成本访问B)。这个BFS最多访问每个顶点两次,因此复杂性仍然是线性的。

因此,这个问题可以通过图中每个顶点的BFS来解决。当然,也许这可以提高效率;什么是足够的取决于n和m的大小。

相关问题