我在应用数学方面存在一个问题,几乎可以很好地映射到在多路树中找到最长的路径。
我有一个函数child(),它给出了子节点(满足条件的空间中的点)。唯一需要注意的是,child()需要连接到它的所有先前节点,包括根节点。我正在努力以递归方式编写代码。到目前为止,我有类似下面的内容。
def multitree(node):
tmp_list = child(node)
for child2 in tmp_list:
if len(child(child2)))==0: #if you hit a leaf (dead end), go to next element
continue
else:
multitree(child2)
但是在这一点上,我不知道该返回什么。我本质上想要映射整个多路树,直到我到达一切叶子。任何想法或提示?谢谢你们。
编辑:
更新1:为了完整起见,我概述了child()所需的输入:https://i.imgur.com/3MkfsYc.png基本上找到由箭头child()标记的节点的子节点需要节点列表根与节点本身之间,即标有红点的节点。
更新2:
我已经写了下面的孩子(节点),我正在研究它 -
def pathwalk(node):
children = child(node)
paths = [child(node.append(kid)) for kid in children]
return paths
答案 0 :(得分:1)
你可以做这样的事情来获得最长的路径。在这里,它为您提供了一个节点列表,您可以从中提取任何相关信息:
def longest_path(node):
children = child(node)
if not children: # leaf node
return [node]
children_vals = [longest_path(c) for c in children]
longest = max(children_vals, key=len)
return [node] + longest
不处理关系,或者选择任意选择一个选项。
(注意:半测试)
答案 1 :(得分:0)
我想我已经找到了这个问题。因为我想保留所有节点的运行列表,你找到了孩子们(你跟踪你走的路径,请参阅imgur pic)。我通过添加
编辑了Illuvatar的例程children_vals = [longest_path(node+[c]) for c in children]
通过这种方式,您可以递归地将每个父级与其子级连接起来。