多方向の木の中で最長の経路を見つけることにほぼ完全に対応することができる、適用された数学の問題があります。多道の木と構造
私は子ノード(条件を満たす空間上の点)を与える関数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:完全のために、私がスケッチどのような入力子()の目安が必要です。https://i.imgur.com/3MkfsYc.png基本的には、矢印子でマークされたノードの子ノードを見つけるために()が必要ですルートとノード自体との間のノードのリスト、すなわち赤い点でマークされたノード。
アップデート2:
私は以下のように、子(ノード)を書いたと私は現在、それに取り組んでいます -
def pathwalk(node):
children = child(node)
paths = [child(node.append(kid)) for kid in children]
return paths
最長のパスを見つけたり、すべてのパスを取得してそこから最長のパスを探したいだけですか? – Iluvatar
ツリー内のすべてのパスを返す標準的な深さ優先検索や幅優先検索を使用しないで、それに渡って 'max(paths、key = len)'だけを使用する理由はありますか?ところで、単純なスタックやキューと再帰を使ってこれらの検索を行う方が簡単です。 – AChampion
ランタイムが大きく違わない場合は、最長のパスに加えてすべてのパスを表示したいと思います。どのように私は上記の場合にDFSまたはBFSを実装するか考えていますか?私がDFSやBFSのすべての例を見てきたのは、すでに「マッピングされている」ツリーであったためです。この中で、私は葉を打つまで子ノードを再帰的に見つけることしかできません。私は子供()がノードだけでなく、それとルートノードの間のすべてのノードを入力しなければならないというこの警告を持っています。 –