我正在尝试以大西洋的方式学习 Python,并被困在 Project Euler #18 上。
我可以 在网上找到的所有东西(除此之外还有更多的谷歌搜索)是“你可以暴力破解它,但这里有一个更优雅的解决方案”的一些变体......
我明白了,我完全明白。那里确实有很好的解决方案,我期待着有一天,“无环图”这个词在我脑海中会让人联想到比模糊的 1 兆像素分辨率更多的东西。但是在我跑到这里之前,我需要先走路,看看状态,然后玩弄暴力答案。
所以,问题:我如何在Project Euler #18中生成(枚举?)三角形的所有有效路径并将它们存储在适当的 python 数据结构中?(列表列表是我最初的倾向?)。我不想要答案 - 我想知道如何暴力破解所有路径并将它们存储到数据结构中。
这就是我所拥有的。我肯定循环错误的数据集。期望的行为是“深度优先(?)”,而不是无效地循环每一行。我读了ch。Norvig 书中的第 3 章,但无法翻译伪代码。尝试阅读 ch 的 AIMA python库。3 但它有太多的飞跃。
triangle = [
[75],
[95, 64],
[17, 47, 82],
[18, 35, 87, 10],
[20, 4, 82, 47, 65],
[19, 1, 23, 75, 3, 34],
[88, 2, 77, 73, 7, 63, 67],
[99, 65, 4, 28, 6, 16, 70, 92],
[41, 41, 26, 56, 83, 40, 80, 70, 33],
[41, 48, 72, 33, 47, 32, 37, 16, 94, 29],
[53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14],
[70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57],
[91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48],
[63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31],
[04, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23],
]
def expand_node(r, c):
return [[r+1,c+0],[r+1,c+1]]
all_paths = []
my_path = []
for i in xrange(0, len(triangle)):
for j in xrange(0, len(triangle[i])):
print 'row ', i, ' and col ', j, ' value is ', triangle[i][j]
??my_path = somehow chain these together???
if my_path not in all_paths
all_paths.append(my_path)
首选避免使用外部库(如 itertools)的答案。