<分区>
我有一个棘手的逻辑问题,我正在尝试创建一个算法来解决它,但我正在努力解决这个问题。
考虑这个数据:
A to B
A to C
A to D
A to E
B to C
B to D
B to E
C to D
C to E
D to E
如您所见,这有效地生成了如下模型:A - B - C - D - E
你只能朝一个方向走,(从左到右),我想写的是一种算法,可以计算出两点之间所有可能的组合,即
如果我想从 A
到 E
所有可能的组合都是这样的:
A - E
A - D - E
A - C - E
A - B - E
A - C - D - E
A - B - D - E
A - B - C - E
A - B - C - D - E
我想这就是全部。
有人可以帮我解决这个问题的逻辑吗?
首先,考虑如何表示单个“跃点”:每个节点都需要一个相邻节点的列表。从构建这些节点开始。
您还需要一种从节点池中查找节点的方法(通过它的名称?)。也许将它们放在 map 中?
蛮力算法是从请求的节点开始,递归地跟踪所有跃点,观察循环,直到到达请求的结束,传递一个列表——将其用作下推堆栈,以记录路径。每次到达请求的末端时,将列表的内容保存到 Path 集合中。如果你遇到了死胡同(没有链接到请求的结束),请返回你的递归并继续前进。
根据您对速度的需求,您可以扩展数据结构以保存一些预先计算的路径。
尝试用伪代码解决这个问题,然后用 Java。