我有一个问题,我一直在考虑这个问题。
示例:
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。
我正在考虑可能更快的算法,但似乎没有一个好主意
答案 0 :(得分:1)
问题是只有一个环形路。因此,您看到的任何图形都将是所示的形式。问题还在于你可以从一个顶点到另一个顶点,也就是图形连接。
_ _ _ _
_ _ _/ \
| |_ _ _
\_ _ _ _/
因此,如果您从任何顶点应用DFS
,那么您将进入环形路。您可以使用哈希值,并在访问时标记这些信息。当你再次访问同一个顶点时,你就在环形路中。
编辑:正如@Saeed指出的那样,在O(n)中可以很容易地找到铁路顶点的距离。你可以绕过环形路线,移动到更新距离的边缘,然后继续在环形路上。
我建议你等一下教程。
答案 1 :(得分:0)
从理论的角度来看,很难有一个有效的算法。
如果你有一个算法找到最长的循环但没有在同一个边缘上进行两次,你就能解决Halmitonian路径问题http://en.wikipedia.org/wiki/Hamiltonian_path
所以你有un-NP-Complete算法。因此,使用多项式算法的可能性很小。
3000台电台真的是暴力问题吗?我会在每个节点上做一个bfs,每当你点击离开节点时,我都会将它存储为最长的响铃。