特定方格子图中的长路径算法

标签 algorithm path-finding a-star longest-path

以平面的正方形拼接为例,想象一个有限的、连通的和简单连通的子集 D 的瓷砖。 D当然也可以解释为正方形网格的一个特定子图,通过为每个瓦片取一个节点并连接相邻节点。

假设我在 D 中在 D 的边界中有一个起始节点/图 block A 和一个结束图 block B。

是否有一种简单、直接的算法可以在 D 中的 A 和 B 之间找到相当长的自回避路径?

我发现有关寻找绝对最长路径和次优算法的文献,这些算法虽然性能非常好,但看起来非常复杂。我想知道是否存在性能足够好的 tamer 算法。

我在这里唯一的想法是计算通过 A* 的最短路径,然后通过横向“折叠”来扭曲它以填充尽可能多的空间,但我不确定这是否是个好主意。

另一个想法是是否有一个几乎愚蠢的简单“扫描线”模式填充 A 和 B 之间的空间,因此对于“矩形”D 表现良好。我怀疑它存在,但我找不到它。

最佳答案

对于大于 2 维的方形网格:
最长路径问题被认为是 NP-Hard;它不能在多项式时间内解决,除非 P=NP 对于某些任意图形。

话虽如此,你可以做一个DFS在每个节点上确定最长路径。这一切都是假设图表是加权的(你没有在你的帖子中指出)。请务必注意,您不应允许重复顶点。

在 DFS 结束时,将您当前最长的路径与之前被认为最长的路径进行比较。根据需要用最长的时间替换此结果。

运行时间不是很好; exponential

For square grid that is 2-Dimensions

关于特定方格子图中的长路径算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36633030/

相关文章:

java - 从一组正数和负数中找到所有可能等于 0 的子集和?

path-finding - 星型算法-G和H部分的帮助

artificial-intelligence - Lode Runner 中的 AI 寻路

c# - A*(A 星)算法帮助

algorithm - A* - 图遍历启发式

java - k-最短(替代)路径算法,java实现

multithreading - 并行算法实现建议

algorithm - 是否可以编写通用算法来使用 Zippers 更新嵌套(无论嵌套如何)数据结构中的元素?

algorithm - 跳跃点搜索 : mix between Normal and Orthogonal

c# - Unity A* 使用航路点的寻路