查找瓷砖网格中两点之间长度为 n 的所有路径
Finding all paths of length n between two points in a tile grid
我有一个基于图块的二维地图,其中有两个点彼此相邻。我想找到这两点之间长度为 n 的所有路径(这些点总是相邻的,并且 n 的值总是至少为 3,所以这些永远不会是最短路径),并有可能排除任何经过的路径通过一个或多个任意定义的点。
我研究了很多寻路算法,但我无法想出一种方法来将它们修改为 return 所有具有精确长度的路径。有人能给我指出正确的方向吗?
找到所有路径是不寻常的,因此寻路算法在这里可能帮不了您。您确实在寻找缓慢的穷举搜索。
我首先使用 Dijkstra 算法在 n 步内找到您的结束节点和每个节点之间的最短路径。这稍后会有用,因为它会找到每个节点的最短路径。稍后,我们可以用它来 p运行e 无用的路径。
然后我将开始对网格进行迭代搜索。在每一步,跟踪到达那里所用的路径,称为长度 m。请记住,您将有许多路径(可能是循环路径)到达同一节点。你会想保留所有这些。在每次迭代中,查看当前节点的邻居,并将新路径推入搜索中,这些路径会到达每个可以在 n-m 步内到达端点的邻居。
最终你会运行出可能到达终点的节点,你可以简单地查看到达终点的所有路径。
只需运行 详尽搜索。您可以 p运行e 一些永远不会到达目的地的分支:
search(from, to, n):
if from is outside boundaries: return
if distance(from, to) > n: return
if n == 0:
if from == to:
do something with your path
return
search(left of from, to, n-1)
search(right of from, to, n-1)
search(up of from, to, n-1)
search(down of from, to, n-1)
如果您的路径不需要重复点,只需像通常使用 DFS 一样进行跟踪,但请记住在退出节点时取消标记为已访问(以便您可以在另一条路径中再次访问它)。
我有一个基于图块的二维地图,其中有两个点彼此相邻。我想找到这两点之间长度为 n 的所有路径(这些点总是相邻的,并且 n 的值总是至少为 3,所以这些永远不会是最短路径),并有可能排除任何经过的路径通过一个或多个任意定义的点。
我研究了很多寻路算法,但我无法想出一种方法来将它们修改为 return 所有具有精确长度的路径。有人能给我指出正确的方向吗?
找到所有路径是不寻常的,因此寻路算法在这里可能帮不了您。您确实在寻找缓慢的穷举搜索。
我首先使用 Dijkstra 算法在 n 步内找到您的结束节点和每个节点之间的最短路径。这稍后会有用,因为它会找到每个节点的最短路径。稍后,我们可以用它来 p运行e 无用的路径。
然后我将开始对网格进行迭代搜索。在每一步,跟踪到达那里所用的路径,称为长度 m。请记住,您将有许多路径(可能是循环路径)到达同一节点。你会想保留所有这些。在每次迭代中,查看当前节点的邻居,并将新路径推入搜索中,这些路径会到达每个可以在 n-m 步内到达端点的邻居。
最终你会运行出可能到达终点的节点,你可以简单地查看到达终点的所有路径。
只需运行 详尽搜索。您可以 p运行e 一些永远不会到达目的地的分支:
search(from, to, n):
if from is outside boundaries: return
if distance(from, to) > n: return
if n == 0:
if from == to:
do something with your path
return
search(left of from, to, n-1)
search(right of from, to, n-1)
search(up of from, to, n-1)
search(down of from, to, n-1)
如果您的路径不需要重复点,只需像通常使用 DFS 一样进行跟踪,但请记住在退出节点时取消标记为已访问(以便您可以在另一条路径中再次访问它)。