寻找地铁计划的环形路

时间:2011-11-25 16:23:27

标签: c++ algorithm

我有一个问题,我一直在考虑这个问题。

示例:

1-2
3-4
6-4
2-3
1-3
3-5

注意:“a-b”表示'a'连接到'b','b'连接到'a'

我怎样才能找到最长的环路;
它是1-2-3导致例子中的1-2,1-3,2-3。

我正在考虑使用蛮力,但这似乎不起作用因为它无法计算多达3000个组合

我正在考虑可能更快的算法,但似乎没有一个好主意

2 个答案:

答案 0 :(得分:1)

问题是只有一个环形路。因此,您看到的任何图形都将是所示的形式。问题还在于你可以从一个顶点到另一个顶点,也就是图形连接。

        _ _ _ _
  _ _ _/        \
       |         |_ _ _
        \_ _ _ _/

因此,如果您从任何顶点应用DFS,那么您将进入环形路。您可以使用哈希值,并在访问时标记这些信息。当你再次访问同一个顶点时,你就在环形路中。

编辑:正如@Saeed指出的那样,在O(n)中可以很容易地找到铁路顶点的距离。你可以绕过环形路线,移动到更新距离的边缘,然后继续在环形路上。

我建议你等一下教程。

答案 1 :(得分:0)

从理论的角度来看,很难有一个有效的算法。

如果你有一个算法找到最长的循环但没有在同一个边缘上进行两次,你就能解决Halmitonian路径问题http://en.wikipedia.org/wiki/Hamiltonian_path

所以你有un-NP-Complete算法。因此,使用多项式算法的可能性很小。

3000台电台真的是暴力问题吗?我会在每个节点上做一个bfs,每当你点击离开节点时,我都会将它存储为最长的响铃。