【问题标题】:Find ALL paths in a grid between 2 nodes在 2 个节点之间的网格中查找所有路径
【发布时间】:2010-10-25 08:20:59
【问题描述】:

我正在尝试查找网格中 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 中完成)。

【问题讨论】:

    标签: c path grid planning


    【解决方案1】:

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

    【讨论】:

    • Matti...我已经找到了解决方案...它适用于小网格...基于递归...
    • 递归仅适用于最短路径......而且 Dijkstra 或 Bellman Ford 都不会提供帮助,因为它们是最短路径......问题不在于我找不到路径。 ..问题是我需要所有的路径....
    【解决方案2】:

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

    这是 NP-Hard 的 Longest Path Problem

    【讨论】:

    • 这并不完全准确 - 指定的开始和结束节点极大地降低了复杂性。
    • @Sam,很公平。没想到。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2014-07-09
      • 2012-12-15
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多