アルゴリズムとプログラミング

基本情報技術者試験有向グラフを次の辺リストで与える(u → v は u から v への辺)。 1→2, 1→3, 2→4,…

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
有向グラフを次の辺リストで与える(u → v は u から v への辺)。 1→2, 1→3, 2→4, 5→1 次の手続 reachCount は、始点 s から有向辺をたどって到達できるノードの総数(s 自身を含む)を返す。スタックを用いた深さ優先で探索する。reachCount(1) を実行したとき、戻り値はどれか。
○整数型: reachCount(整数型: s)
  stack ← 空のスタック
  visited[s] ← true
  push(s)
  整数型: cnt ← 1
  while (stack が空でない)
    整数型: u ← pop()
    整数型: v
    for (v を 1 から 5 まで 1 ずつ増やす)
      if (辺 u→v が存在 かつ visited[v] が false)
        visited[v] ← true
        cnt ← cnt + 1
        push(v)
      endif
    endfor
  endwhile
  return cnt
到達 4 個
全 5 個
始点のみ 1 個
2 個
正解
ア.到達 4 個

1 から有向辺をたどると 2,3 へ、さらに 2 から 4 へ到達する。到達集合は {1,2,3,4} の 4 個であり、5 は 1 へ向かう辺しか持たず到達できないため、cnt=4 となり アが正しい。

?選択肢ごとの解説

ア ○1 から有向辺をたどると 2,3 へ、さらに 2 から 4 へ到達する。到達集合は {1,2,3,4} の 4 個であり、5 は 1 へ向かう辺しか持たず到達できないため、cnt=4 となり アが正しい。
イ ×全ノード数 5 をそのまま答えた、有向辺の向きを無視して 5→1 を逆向きにたどれると誤認した誤りである。
ウ ×始点 1 だけを数えて隣接ノードへの探索を行わなかった、ループ未実行の誤りである。
エ ×1 の直接の隣接 2,3 のうち 1 つ分しか進めず 2 個とした、間接到達 4 と分岐を取りこぼした誤りである。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-algo-0149

【基本情報技術者試験】有向グラフを次の辺リストで与える(u → v は u から…|正解「到達 4 個」|ukamiru 過去問