【发布时间】:2021-12-15 21:47:33
【问题描述】:
我在想出一个算法时遇到了困难,我现在不知道该怎么办。
我需要从a 到d,但只能通过滚动这些列表:
[e, d]
[a, b, c]
[d, a]
[a, b]
[a, e, b]
这当然是一个简单的例子,解决方法是:
[a → d] // 3rd line
[a → e → d] // 5th line + 1st line
[a → b → e → d] // 2nd + 5th + 1st line
但我必须在 Python 中解决它。
我想出了两种方法来解决这个问题,第一种是使用 for 循环,但循环开始重复并且非常耗时,所以我选择了想法 2。
我正在考虑创建一个以a 开头并以d 结尾的所有可能变体的列表。然后在我们指定的列表中检查这是否可行。
from itertools import permutations
lst = ['a', 'b', 'c', 'd', 'e']
x = 'a'
y = 'd'
for i in range(1, len(lst)):
perm = permutations(lst, i+1)
for j in list(perm):
if (j[0] == x) and (j[-1] == y):
print(j)
但后来不知何故我被卡住了,我不知道现在该怎么办。有人可以给我一个提示吗?还是我做错了?
编辑:
我正在尝试查找所有路径并打印出来。
【问题讨论】:
-
你不能只检查每个排列的第一个和最后一个成员吗?
-
你为什么不创建一个邻接表并遍历图来找到你的解决方案?路径上是否有任何要求(例如确实需要最短)。如果没有,您可以执行 bfs 或 dfs。最后你需要展示什么作为结果?通往目标的路径?
-
您想要
a和d的所有排列吗? -
如果您尝试列出所有可能的路径,循环的预期行为是什么?例如使用您的示例,
[a → b → e → a → d]使用第 2、5、5、3 行或类似的,[a → b → e → a → b → e → d]或[a → b → e → a → b → e → a → b → e → d]等。 -
@Oli 理想情况下没有周期
标签: python algorithm combinations