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

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

新規登録して質問してみよう
ただいま回答率
85.35%
連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Python

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

Q&A

3回答

1535閲覧

Python初心者 単純連結グラフの橋の数を数えるプログラム

TAKA_MRMT

総合スコア0

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Python

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

0グッド

0クリップ

投稿2020/10/15 21:58

前提・実現したいこと

単純連結グラフの橋の数を数えるプログラム

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

list index out of range

該当のソースコード

Python

1N=7 2M=7 3edges=((0,2),(1,6),(2,3),(3,4),(3,5),(4,5),(5,6)) 4sets=[{k} for k in range(N)] 5bridge = 0 6node_0=0 7node_1=0 8for m in range(M): 9 for j in range(N): 10 if edges[m][0] in sets[j]: 11 node_0=j 12 if edges[m][1] in sets[j]: 13 node_1=j 14 if node_0 < node_1: 15 sets[node_0].update(sets.pop(node_1)) 16 elif node_0 > node_1: 17 sets[node_1].update(sets.pop(node_0)) 18 if len(sets)>1: 19 print( edges[m][0], '->', edges[m][1] ) 20 bridge = bridge + 1 21print( bridge )

試したこと

初心者でどうすれば治るのかわかりません。先人の方たちの教えを請いたいです

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

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

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

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

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

meg_

2020/10/15 22:28 編集

・エラーメッセージは全文掲載してください。 ・質問のコードでは何が出力されることを想定していますか? ※「Python初心者」ということは他の言語の経験はあるのでしょうか?
guest

回答3

0

記載のコードによるedgesがわかってるようなので、このedgesの要素数='橋の数'なので、これをカウントするプログラムにしたほうが単純ではないでしょうか?

投稿2020/10/15 22:54

R.Shigemori

総合スコア3376

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

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

0

エラーlist index out of rangeの直接の原因は下記です。

エラーが出る直前のsetsの値は[{0, 2, 3, 4}, {1}, {5}, {6}]で、jの値は5でした。
setsの要素数が4個しかないのにsets[5]にアクセスしようとしてエラーになっています。

setsの要素にアクセスする前に要素数のチェックが必要かと思います。
※質問のコードのアルゴリズムが正しいかどうかは検証していません。

投稿2020/10/15 22:40

meg_

総合スコア10760

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

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

0

エラーの原因はm=0,j=4の処理が終わった後のsetsが[{0, 2, 3, 4}, {1}, {5}, {6}]になっており、sets[5]が無いためです。

投稿2020/10/15 22:36

takutakuya

総合スコア979

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問