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

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

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
閉路のない有向グラフ(DAG)を次の辺リストで与える(u → v は u から v への辺)。 1→2, 1→3, 2→4, 2→5, 2→6, 3→4, 3→5, 3→6, 4→6, 5→6 次の再帰手続 countPaths は、ノード s からノード t へ至る相異なる有向経路の総数を返す。countPaths(1, 6) を実行したとき、戻り値はどれか。
○整数型: countPaths(整数型: s, 整数型: t)
  if (s が t と等しい)
    return 1
  endif
  整数型: total ← 0
  整数型: v
  for (v を 1 から 6 まで 1 ずつ増やす)
    if (辺 s→v が存在)
      total ← total + countPaths(v, t)
    endif
  endfor
  return total
3 通り
8 通り(二重計上)
2 通り
全 6 通り
正解
エ.全 6 通り

DAG の経路数は後続ノードの経路数の総和で求まる。f(6)=1、f(4)=f(6)=1、f(5)=f(6)=1、f(2)=f(4)+f(5)+f(6)=1+1+1=3、f(3)=同様に 3、f(1)=f(2)+f(3)=3+3=6 となるため エが正しい。

?選択肢ごとの解説

ア ×1 の直接分岐 1→2,1→3 と末端だけを数えて 3 通りとした、中間分岐を取りこぼした過少カウントである。
イ ×存在しない辺や同一経路を二重計上して 1 つ多く 8 通りとした過大カウントである。
ウ ×1→2→6 と 1→3→6 の直接経路 2 本だけを数え、4 や 5 を経由する経路を見落とした誤りである。
エ ○DAG の経路数は後続ノードの経路数の総和で求まる。f(6)=1、f(4)=f(6)=1、f(5)=f(6)=1、f(2)=f(4)+f(5)+f(6)=1+1+1=3、f(3)=同様に 3、f(1)=f(2)+f(3)=3+3=6 となるため エが正しい。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

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

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

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

【基本情報技術者試験】閉路のない有向グラフ(DAG)を次の辺リストで与える(u…|正解「全 6 通り」|ukamiru 過去問