寻找地铁环线方案

Finding ring road of subway scheme

本文关键字:方案 地铁 寻找      更新时间:2023-10-16

我有一个问题,我已经考虑了一段时间。

示例:

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

注:"a-b"是指与"b"相连的"a"和与"a"相连的"b"

我怎样才能找到最长的环路;
1-2-3, 1-2, 1-3, 2-3,从例子。

我在考虑使用暴力,但这似乎不起作用,因为它不能计算多达3000的组合

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

问题说只有一条环路。你看到的任何图形都是这样的形式。这个问题还说,你可以从一个顶点到达另一个顶点,也就是说,图是连通的。

        _ _ _ _
  _ _ _/        
       |         |_ _ _
        _ _ _ _/

所以,如果你从任意顶点应用DFS,那么你就会在环路上。你可以取一个散列,并在访问它们时不断标记这些顶点。当你再次访问同一个顶点时,你就在环路上。

EDIT:正如@Saeed指出的,在O(n)中可以很容易地求出顶点到铁路的距离。你可以绕过环形公路,移动到边缘更新距离,然后继续沿着环形公路行驶。

我建议你等一下教程。

从理论上讲,很难有一个有效的算法。

如果你有一个算法,可以找到最长的循环,而不用在同一条边上走两次,你就能解决哈密顿路径问题http://en.wikipedia.org/wiki/Hamiltonian_path

所以你有一个np完全算法。所以出现多项式算法的可能性很小。

3000个站点真的存在暴力问题吗?我会在每个节点上做一个bfs,每次你碰到出发节点,我就把它存储为最长的环。