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)
2 回答
只需进行详尽的搜索即可 . 你可以修剪一些永远不会到达目的地的分支:
如果您的路径不需要重复点,只需按照通常使用DFS的方式进行跟踪,但请记住在退出节点时取消标记为已访问(因此您可以在另一个路径中再次访问它) .
找到所有路径是不寻常的,因此寻路算法可能对您没有帮助 . 你真的在寻找一个慢速详尽的搜索 .
我首先使用Dijkstra算法在n个步骤中找到终端节点和每个节点之间的最短路径 . 这将在以后有用,因为它找到每个节点的最短路径 . 之后,我们可以用它来修剪无用的路径 .
然后我会开始迭代搜索网格 . 在每一步,跟踪到达那里的路径,调用长度m . 请记住,您将有许多路径(可能是循环路径)到达同一节点 . 你会想要保留所有这些 . 在每次迭代中,查看当前节点的邻居,并将新路径推送到搜索中,该搜索将以n-m步长到达可以到达 endpoints 的每个邻居 .
最终,您将耗尽可能到达 endpoints 的节点,您只需查看到达 endpoints 的所有路径 .