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

基本情報技術者試験グラフ」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
有向グラフを次の辺リストで与える(u → v は u から v への辺)。 1→3, 2→3, 4→3, 2→5, 4→5 各ノードの入次数(そのノードへ入ってくる辺の本数)を数え、入次数が最大のノードの番号を求める。最大が同数のときは番号の小さいノードを選ぶ。次の擬似言語を実行したとき返り値 best はどれか。
○関数: maxInDegree(): 整数型
  整数型の配列: indeg ← {0, 0, 0, 0, 0}
  各辺 u→v について
    indeg[v] ← indeg[v] + 1
  整数型: i, best ← 1
  for (i を 2 から 5 まで 1 ずつ増やす)
    if (indeg[i] > indeg[best])
      best ← i
    endif
  endfor
  return best
ノード 5(入次数 2)
ノード 3(入次数 3)
ノード 2(入次数 0)
ノード 4
正解
ノード 3(入次数 3)

辺の終点 v を数えると、ノード3へは 1→3, 2→3, 4→3 の 3 本、ノード5へは 2→5, 4→5 の 2 本、他は 0 本である。indeg={0,0,3,0,2} の最大はノード3(3本)なので best=3、すなわち イが正しい。

?選択肢ごとの解説

ア ×入次数 2 のノード5 であり、最大ではなく 2 番目に大きいノードを選んだ誤りである。
イ ○辺の終点 v を数えると、ノード3へは 1→3, 2→3, 4→3 の 3 本、ノード5へは 2→5, 4→5 の 2 本、他は 0 本である。indeg={0,0,3,0,2} の最大はノード3(3本)なので best=3、すなわち イが正しい。
ウ ×ノード2 は入次数 0 であり、辺の始点(出る側)を誤って数えた、入次数と出次数を取り違えた誤りである。
エ ×ノード4 も入次数 0 であり、入ってくる辺が 1 本もないノードを選んだ誤りである。

くわしく

入次数は『辺の終点 v』を数えることで求まる。比較ループは『より大きい場合のみ更新』とすることで、同数のときは先に見た(番号の小さい)ノードが保持され、タイブレーク規則が自然に満たされる。

本番での押さえどころ

試験のコツ

入次数は矢印の『先』、出次数は矢印の『元』。各辺を1本ずつ終点に加算し、表を作って最大を読む。

覚え方

『入次数は刺さってくる矢の本数』と覚える。

よくある誤り

始点 u を数えて出次数を求めてしまう、等号付き比較で同数時に後のノードへ更新してしまうミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0154

【基本情報技術者試験】グラフの問題 — 解答・解説|ukamiru 過去問