寻找地铁环线方案
Finding ring road of subway scheme
我有一个问题,我已经考虑了一段时间。
示例:
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,每次你碰到出发节点,我就把它存储为最长的环。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 我在运行这个黑客排名 Gridland 地铁的解决方案时遇到分段错误
- 寻找地铁环线方案