考虑网格(n = 3的矩阵):
0 1 2
3 4 5
6 7 8
我需要找到任意点到任意点(此处为3到2)之间的k+1
,k+2
路径,其中k
是最短距离或跳数({{ 1}})。如何查找dist k=3
或k=4
的路径?
我有一个程序(在java中)用于查找所有k=5
路径:
k
通过使用距离公式,我可以限制垂直和水平移动的数量,并使用递归来查找最短路径中的所有点。有人可以为dist> 3的路径建议类似的内容吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
忽略它是一个网格的事实。只需将其视为图表。你有分数。每个点都有邻居。每个点与最终点的距离最小。这是一些用于演示算法的Python。 (翻译成Java应该不难。)
def paths(p1, p2, length):
answer = []
if 0 == length and p1 == p2:
answer = [p1]
elif length <= distance(p1, p2):
for p in neighbors(p1):
answer.extend([ [p1] + x for x in paths(p, p2, length-1) ])
return answer
作为重要的优化,您可能会注意到在您的情况下,从p1
到p2
的所有路径都具有相同的长度mod 2.因此,对于长度k + i
,根本没有路径,除非i
是偶数。