科目B
令和6年度 基本情報技術者試験 科目B 公開問題 問3
次のプログラム中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。
図 1 に示すグラフの頂点には,1 から順に整数で番号が付けられている。グラフは無向グラフであり,各頂点間には高々一つの辺がある。一つの辺は両端の頂点の番号を要素にもつ要素数 2 の整数型の配列で表現できる。例えば,{1,3} は頂点 1 と頂点 3 を端点とする辺を表す。グラフ全体は,グラフに含まれる辺を表す要素数 2 の配列を全て格納した配列(以下,辺の配列という)で表現できる。辺の配列の要素数はグラフの辺の個数と等しい。図 1 のグラフは整数型配列の配列{{1, 3}, {1, 4}, {3, 4}, {2, 4}, {4, 5}}と表現できる。
〔図〕図1 グラフの例:頂点 1~5 を丸で示した無向グラフ。辺は 1―3,1―4,3―4,2―4,4―5(頂点 3 が上,1 が左,4 が中央,2 が左下,5 が右下に配置)。
関数 edgesToMatrix は,辺の配列を隣接行列に変換する。隣接行列とは,グラフに含まれる頂点の個数と等しい行数及び列数の正方行列で,i 行 j 列の成分は頂点 i と頂点 j を結ぶ辺があるときに 1 となり,それ以外は 0 となる。行列の対角成分は全て 0 で,無向グラフの場合は対称行列になる。図 1 のグラフを表現する隣接行列を図 2 に示す。
〔図〕図2 図 1 のグラフを表現する隣接行列(5 行 5 列,丸括弧で囲まれた行列):
0 0 1 1 0
0 0 0 1 0
1 0 0 1 0
1 1 1 0 1
0 0 0 1 0
関数 edgesToMatrix は,引数 edgeList で辺の配列を,引数 nodeNum でグラフの頂点の個数をそれぞれ受け取り,隣接行列を表す整数型の二次元配列を返す。
〔プログラム〕
○整数型の二次元配列: edgesToMatrix(整数型配列の配列: edgeList,
整数型: nodeNum)
整数型の二次元配列: adjMatrix ← {nodeNum行nodeNum列の 0}
整数型: i, u, v
for (i を 1 から edgeListの要素数 まで 1 ずつ増やす)
u ← edgeList[i][1]
v ← edgeList[i][2]
endfor
return adjMatrix
答えを選ぶ
出典:令和6年度 基本情報技術者試験 科目B 公開問題 問3(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:エ
覚える知識
隣接行列とグラフの対応読解
隣接行列は、頂点 i と頂点 j の間に辺があるとき i 行 j 列を 1 にした正方行列。無向グラフでは i→j と j→i が同じ意味なので対称になる。
この問題で必要なこと
辺 {u, v} は無向なので、頂点 u から v、v から u の両方向にたどれる。隣接行列は対称行列になるので、u 行 v 列と v 行 u 列の両方に 1 を入れる。図2 でも、辺 {1,3} について 1 行 3 列と 3 行 1 列が両方 1 になっている。正解は エ。
ひっかけ
ウ・オ は片方向だけで、有向グラフの書き方になり対称にならない。ア・イ・カ は対角成分(自分自身へのループ)に 1 を入れており、「対角成分は全て 0」に反する。