0

我试图找到网格中 2 个节点之间的所有路径,并且路径必须从头到尾穿过所有节点。示例(开始 = S,结束 = E)

0 0 0
0 S 0
0 0 E

上面的答案是 2 条路径:(忽略 '.''s)

0-0-0
|.......|
0 S-0
|
0-0-E

0-0-0
|......|
0 S 0
|...|...|
0-0 E

我想过使用递归,但由于每次调用的高开销而放弃了......并决定使用堆栈的迭代方法。(有点像递归但不是......固定的内存开销)。该解决方案适用于大小(4x7)的网格,但在 8x8 网格上进行了尝试……但它没有在 4 小时内完成……这是有道理的,因为可能性的总数约为 3** 62(大约),因为不在边缘的每个节点都有 3 种可能的遍历方式......因此该解决方案失败了。

我想过将 8x8 网格分成 2 个,使用垂直和水平分割......但这会导致找到不太理想的路径。

有什么我想念的吗????可以做些什么来让它更快吗?我将发布我明天的解决方案(在 C 中完成)。

4

3 回答 3

0

好吧,有一种线性时间算法可以在矩形网格图中找到任意两个给定顶点之间的最长路径,这似乎正是您要寻找的。

于 2014-11-12T14:36:19.300 回答
0

不,您不会错过任何事情,也没有什么可以做得更快。

这是 NP-Hard的最长路径问题。

于 2010-10-25T08:37:56.473 回答
0

看一下最短路径问题,它应该可以帮助您开始。Bellmann-Ford 或 Dijkstra 算法值得一试。如果您的网格有一些可以利用的属性,您可能能够提高这些效率。

于 2010-10-25T08:36:13.563 回答