【问题标题】:Finding all possible paths starting between a specific start and end查找从特定开始和结束之间开始的所有可能路径
【发布时间】:2011-07-31 14:08:49
【问题描述】:

我想找到从特定节点开始到特定节点结束的所有可能路径。我在java中尝试了深度优先搜索,但它不适用于我的情况。因为我的道路将朝着同一个方向。我不想遍历选定节点周围的所有其他节点。

我无法上传显示我想要的图片。无论如何,我会尽力解释。 节点间

0 1 2 3 4 5 6 7 8 9

例如我要查找的路径是从2到9。算法产生的可能路径应该是

2-7-9

2-4-6-8-9

2-4-6-9

对于节点 1,我的下一个可能只是节点 2,所以我不会尝试节点 0 和节点 -3。由于我设置了一些特殊规则,只有 node-2 适合 node-1。选择节点 2、节点 4 和节点 7 的下一个节点。对于 node-4,只有 node-6 是合适的。对于节点 6,节点 8 和节点 9 是合适的。另一方面,对于节点 7,下一个节点只能是 9。

所有这些路径都创建并保存在哈希图或列表结构中。

DFS 发现路径,例如,在 0-1 和 1-3 之间,这对我来说是不可接受的。由于算法的性质,它找到了最短路径。我想要根据规则的所有可能性,而不仅仅是最短的。规则不是问题,所以我不想让你感到困惑和无聊。解决这个问题的一般方法对我来说很重要。

提前致谢

【问题讨论】:

  • 深度优先或广度优先都应该起作用——这完全取决于您输入参数的方式。
  • 我更新了我的答案,但是如果没有帮助,我认为您需要提供更多信息。向我们展示您迄今为止提出的搜索的实现。

标签: java graph path


【解决方案1】:

您将希望通过Queue 使用breadth-first search

编辑:重新阅读您的问题后,我认为问题在于您如何表示有向图,而不是您选择的算法。 DFS 或 BFS 都适用于您的情况,但您需要正确实现图形,以便算法知道不要尝试错误方向的路径。

DFS 发现路径,例如,在 0-1 和 1-3 之间,这对我来说是不可接受的。由于算法的性质,它找到了最短路径。我希望所有的可能性都符合规则,而不仅仅是最短的。

实际上,BFS 通常用于查找最短路径,而两者都可以用于查找所有可能的路径。我会坚持使用 DFS,因为它更容易实现(使用递归而不是 Queue 等)

【讨论】:

    【解决方案2】:

    如果您正确地表示您的节点和规则,算法将不会找到不合法的路径。例如,如果您想从节点 2 开始,请将其设为起始节点。

    最简单的就是定义一个类来表示一个节点。在类中有这个“父”的所有“子”节点的数组列表。在节点中还有一个整数,用作深度优先行走的“光标”。 (也有另一个整数/字符字符串是节点 # 或其他标识符,这并没有什么坏处。)

    将所有节点中的整数“光标”设置为零。选择你的起始节点——让它成为“当前节点”。在该节点上调用一个方法来遍历它。它拾取光标并提取相应的数组列表元素。然后它为该数组列表元素中的节点调用“walk”方法。返回时,“光标”会增加。

    “walk”方法在到达目标节点时返回,或者当“光标”增加超过子数组的大小时返回。

    沿途您可以保留任何您想要的路径记录。一种方法是传递每个“walk”调用时访问的节点的数组列表,在传递之前将当前节点添加到列表中。当步行到达终端节点时,数组列表被复制为答案之一。从“walk”返回时,添加的元素被删除。

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 2020-05-10
      • 2012-10-18
      • 1970-01-01
      相关资源
      最近更新 更多