質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

959閲覧

再帰関数をループ処理に変換

valuetheater

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/06/23 14:40

競プロ AOJ:Traffic Tree をpythonで全方位木DPを実装しています。
exp:23でエラー:再帰上限エラーだと思います。
なので、dfs1, dfs2をループ処理に変換したいのですがご教示おねがいします。

def resolve():
def dfs1(idx, par):
for to in G[idx]:
if to == par:
continue
dfs1(to, idx)
dist[idx] = max(dist[idx]+1, dist[to])

def dfs2(idx, d_par, par): d_child = [] d_child.append((0, -1)) for to in G[idx]: if to == par: d_child.append((d_par + 1, to)) else: d_child.append((dist[to] + 1, to)) d_child.sort(reverse=True) ans[idx] = d_child[0][0] for to in G[idx]: if to == par: continue nx_d_par = d_child[d_child[0][1] == to][0] dfs2(to, nx_d_par, idx) N = int(input()) G = [[] for _ in range(N)] for i in range(N - 1): a, b = map(lambda x:int(x)-1, input().split()) G[a].append(b) G[b].append(a) dist = [0]*N ans = [0]*N dfs1(0,-1) dfs2(0, 0, -1) for i in range(N): print(2*(N-1) - ans[i])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Penpen7

2020/06/23 19:38

コードの挿入を使ってコードを貼り付けてください。インデントが潰れるとコードが読めません。
guest

回答1

0

自己解決

解決しました。

def dfs1(topo, par): for idx in reversed(topo): for to in G[idx]: if to == par[idx]: continue dist[idx] = max(dist[idx], dist[to] + 1) def dfs2(idx, d_par, par): stack = [(idx,d_par, par)] while stack: idx, d_par, par = stack.pop() d_child = [] d_child.append((0, -1)) for to in G[idx]: if to == par: d_child.append((d_par + 1, to)) else: d_child.append((dist[to] + 1, to)) d_child.sort(reverse=True) ans[idx] = d_child[0][0] for to in G[idx]: if to == par: continue nx_d_par = d_child[d_child[0][1] == to][0] stack.append((to, nx_d_par, idx))コード

投稿2020/07/04 12:17

valuetheater

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問