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

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

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

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

Q&A

解決済

2回答

1869閲覧

与えられた無向グラフが木構造かどうか確かめるアルゴリズムの作成

ijuya_yika

総合スコア50

アルゴリズム

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

0グッド

1クリップ

投稿2017/11/09 03:33

編集2017/11/09 03:34

与えられた無向グラフが木構造かどうか確かめるアルゴリズムの作成しようとしています。

木構造になるためには
①全てのノードがつながっている
②ループを含むのはNG
以上のことを念頭において擬似コードを書きたいのですが、①の全てのノードがつながっているのチェックの仕方をどうやれば良いのでしょうか?

②の件に関しては深さ優先探索を取り入れて一度訪れたノードをvisited配列に格納しもし格納済みのノードに辿り着いてしまった場合はFalseを戻り値に、もしたどり着かなかった場合はTrueを返せばよいのかなとおもうのですが。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

②の検出完了後に、全てのノードを枚挙してvisited配列に含まれていないノードがあったらfalseでよいのでは?

ただ深さ優先探索は、全てのノードをルートにして探索するイメージでしょうか?
この場合は、各ルート毎に冒頭の処理をして、全てのノードを巡回するルートが1つもなければfalseで良いように思います。

取り敢えずの思いつきですから、もっと高速なアルゴリズムもある筈と思います。

投稿2017/11/09 03:49

Chironian

総合スコア23272

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

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

ijuya_yika

2017/11/09 04:28

お陰様で納得が行きました。迅速なご回答ありがとうございます。
guest

0

Python2.7用ですがコードもあります。
Check if a given graph is tree or not

ツリーとは連結(connected)かつ閉路(cycle)がないグラフといえます。
上記では、閉路を探しつつvisitedフラグを埋めておき、閉路がなければすべてvisitedか(連結か)で判定しているようです。

投稿2017/11/09 04:23

編集2017/11/09 04:28
can110

総合スコア38262

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

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

ijuya_yika

2017/11/09 04:31

迅速なご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問