1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 幅優先探索・深さ優先探索メニュー(言語選択)
  4. 問題一覧 Scala編
  5. グラフでの幅優先探索

幅優先探索・深さ優先探索メニューのサムネイル
グラフでの幅優先探索 (paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

多重辺・自己ループのない無向グラフを構成する 1 〜 N の番号がつけられた頂点とそれらを結ぶ M 本の辺の情報と頂点番号 X が与えられます。
以下のルールにしたがって番号 X の頂点から幅優先探索をおこなったとき、訪問する頂点を順に出力してください。

・現在の頂点に隣接する全ての未訪問の頂点を、現在キューに入っている全ての頂点を探索したのち、番号が一番小さい頂点から順に探索する。

入力される値

N M X
a_1 b_1
...
a_M b_M


・ 1 行目では、頂点の数 N と辺の本数 M, 頂点番号 X が半角スペース区切りで与えられます。
・ 続く M 行では、M 個の辺の両端の頂点の番号 a_i, b_i (1 ≦ i ≦ M) が与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

頂点番号 X から問題文のルールにしたがって幅優先探索をおこなったとき、訪問する頂点の番号を順に改行区切りで出力してください。

条件

すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ N ≦ 100,000
・1 ≦ M ≦ min(N*(N-1)/2, 100,000)
・1 ≦ X ≦ N
・1 ≦ a_i, b_i ≦ N (1 ≦ i ≦ M)
・a_i ≠ b_i (1 ≦ i ≦ M)

入力例1

7 7 1
1 2
1 3
2 3
2 4
3 5
3 6
4 7

出力例1

1
2
3
4
5
6
7

問題一覧へ戻る

ページの先頭へ戻る