假设一个函数将s(原始六边形),f(目标六边形)和n(路径长度)值作为参数,并输出所有长度为n的可能路径的列表。
s
f
n
假设我们的原点(s)是红色的虚线十六进制(2, 3),而目标(f)是蓝色的虚线虚线(5, 2)。我们想通过5个步骤(n = 5)达到蓝色的虚线十六进制。还应考虑到,如果步行到达特定的十六进制,则在下一步中也可能会停留在该十六进制中。换句话说,可能的路径之一可以是(3, 2) - (4, 2) - (5, 2) - (5, 2) - (5, 2)。它也算作5长度路径。
(2, 3)
(5, 2)
n = 5
(3, 2) - (4, 2) - (5, 2) - (5, 2) - (5, 2)
这些是从(2, 3)到的一些示例路径(5, 2):
(1, 3) - (2, 3) - (3, 2) - (4, 3) - (5, 2) (3, 3) - (4, 4) - (5, 4) - (5, 3) - (5, 2) (2, 3) - (2, 3) - (3, 3) - (4, 3) - (5, 2)
我想以某种方式找到所有这些路径。但是,我无法确定哪种算法为解决此问题提供了最有效的解决方案。首先想到的是使用深度优先搜索,但是我想知道在这种情况下还有没有更好的选择。
假设您定义了以下递归函数,返回一个成对列表的列表,其中每个成对列表都是从from到tolength 的路径i:
from
to
i
find_paths_from_to_with_length(from, to, i): if i == 1: if to in neighbors(from) or from == to: return [[(from, to)]] return [] all_paths = [] for node in neighbors(from) + [from]: neighbor_all_paths = find_paths_from_to_with_length(node, to, i - 1) for path in neigbor_all_paths: all_paths.append([(from, node)] + neighbor_path return all_paths
然后,只需使用源,目标和所需的长度来调用它。