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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1229閲覧

atcoder abc213dに関する質問

alphaY

総合スコア1

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/10 15:36

編集2021/08/10 15:54

前提・実現したいこと

atcoderの問題でエラーが出たのですが、どうしたらいいのかわからないのでご教授お願い致します。問題のurl https://atcoder.jp/contests/abc213/tasks/abc213_d

発生している問題・エラーメッセージ

Traceback (most recent call last): File "./Main.py", line 36, in <module> dfs(1) File "./Main.py", line 32, in dfs dfs(j) File "./Main.py", line 32, in dfs dfs(j) File "./Main.py", line 35, in dfs dfs(j) File "./Main.py", line 26, in dfs visited[p] = True TypeError: list indices must be integers or slices, not NoneType

該当のソースコード

python

1import sys 2input = sys.stdin.readline 3sys.setrecursionlimit(100000000) 4ans = [] 5n = int(input()) 6graph = [] 7for i in range(n+1): 8 graph.append([]) 9for i in range(n-1): 10 a, b = map(int, input().split()) 11 graph[a].append(b) 12 graph[b].append(a) 13 14for i in range(n+1): 15 graph[i].sort() 16 17visited = [] 18for i in range(n+1): 19 visited.append(False) 20first = [] 21for i in range(n+1): 22 first.append(None) 23 24def dfs(p): 25 ans.append(p) 26 visited[p] = True 27 ok = 0 28 for j in graph[p]: 29 if not visited[j]: 30 first[p] = j 31 ok = 1 32 dfs(j) 33 if ok == 0 and p != 0: 34 j = first[p] 35 dfs(j) 36dfs(1) 37print(*ans)

試したこと

TypeErrorなので型(文字列、数字、リストや辞書)の種類が違うということなんでしょうけど、どこのコードをどう変えたらいいかわかりませんでした。初心者質問ですいません。

補足情報(FW/ツールのバージョンなど)

#解説のコード

python

1import sys 2sys.setrecursionlimit(300000) 3 4N=int(input()) 5G=[[] for i in range(N+1)] 6for i in range(N-1): 7 a,b=map(int,input().split()) 8 G[a].append(b) 9 G[b].append(a) 10 11for i in range(N+1):G[i].sort() 12 13ans=[] 14def dfs(crr,pre): 15 ans.append(crr) 16 for nxt in G[crr]: 17 if nxt!=pre: 18 dfs(nxt,crr) 19 ans.append(crr) 20 21dfs(1,-1) 22print(*ans)

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

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

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

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

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

y_waiwai

2021/08/10 15:42

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
alphaY

2021/08/10 15:54

ご指摘ありがとうございます。 編集しときました
guest

回答1

0

ベストアンサー

このエラーが出る原因は、戻り先の設定を間違えていることです。

python

1 first[j] = p

python

1 first[p] = j

に修正しましょう。

これを修正しても、まだエラーが出ます。エラーメッセージが同じなので修正されていないように見えるかもしれませんが、エラーが起こる場所が変わっています。
エラーの原因は終了条件を間違えていることです。

python

1 if ok == 0 and p != 0:

ここで次のエラーが起きていますが、これをどのように修正するかは自分で考えてください。

投稿2021/08/10 16:45

編集2021/08/10 16:55
ppaul

総合スコア24666

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

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

alphaY

2021/08/11 03:16

ありがとうございます! エラーが解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問