c++ - 多米诺路径算法

标签 c++ algorithm graph-algorithm

我有一些(我希望)关于可以解决“多米诺骨牌路径”问题的算法的简单问题。我正在寻找能够以低于 O(n^2) 复杂度解决此问题的解决方案。

我有一组 n 点(n 在 [1,100 000] 中,每个点都是不同的),具有 x 和 y 坐标: (0,1) (1,3) (1,2) (2,4) (3,5) (4,2) (5,0)

我正在寻找从起点 (0,y) 到终点 (x,0) 的“路径”(另一个点需要像多米诺骨牌一样粘贴)。在此示例中,路径将如下所示:(0,1) > (1,3) > (3,5) > (5,0)。如果这些点将创建多个路径 - 选择其中任何一个。能在O(n^2)以内完成吗?

编辑:感谢图算法,但是没有它也能完成吗?我正在寻找一些棘手的递归算法或类似的东西。

最佳答案

是的。您应该阅读Dijkstra's algorithm其运行时间为 O(E+V log V),其中 E 是图中的边数,V 是顶点数。一个breadth-first search也可以,因为该图未加权。这将在 O(E+V) 时间内运行。

虽然这些是解决此问题的常见方法,但它们是 by no means the only ones .

关于c++ - 多米诺路径算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863619/

相关文章:

python - 从 x,y 坐标检测左转或右转的算法

algorithm - Dijkstra 算法终止

c++ - 如何找到一条路径访问尽可能多的顶点?

c++ - C++中的点星号运算符

c++ - Point 的运算符 +(Vector) - 但 Vector 使用 Point 并且在 Point 声明中未声明

java - 是否可以在少于 O(n log n) 的时间内比较两个二叉树?

c++ - 来自加权 Delaunay 三角剖分的 Alpha 形状

c++ - 皮质 m3,stm32L1XX 位带

c++ - <BadPtr> 循环出错

ruby - "Combined"3 个或更多字符串的差异/交集