この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

無向グラフを隣接行列に変換するedgesToMatrix関数の空欄を問う問題です。グラフ理論の基礎:隣接行列(Adjacency Matrix)はグラフの頂点数×頂点数の正方行列で、頂点iと頂点jの間に辺があれば[i][j]=1、なければ[i][j]=0です。無向グラフの特性:辺は双方向なので、頂点uと頂点vを結ぶ辺が存在すれば adjMatrix[u][v]=1 かつ adjMatrix[v][u]=1 の両方を設定する必要があります(対称行列になる)。また、自分自身への辺(ループ)はないため対角成分(adjMatrix[i][i])は常に0です。辺の配列{{1,3},{1,4},{3,4},{2,4},{4,5}}を処理する場合:{1,3}の辺→adjMatrix[1][3]=1 かつ adjMatrix[3][1]=1。{1,4}の辺→adjMatrix[1][4]=1 かつ adjMatrix[4][1]=1。以下同様。選択肢Dの「adjMatrix[u,v] ← 1 および adjMatrix[v,u] ← 1」が正解です。

なぜ他の選択肢は違うのか

選択肢 ア
「adjMatrix[u,u] ← 1」は対角成分(自己ループ)に1を設定します。問題文に「対角成分は全て0」と明記されており、この操作は誤りです。辺{u,v}を処理しているのに同じ頂点u同士の関係を設定する誤りです。
選択肢 イ
「adjMatrix[u,u]←1 かつ adjMatrix[v,v]←1」は2つの対角成分を1に設定します。両方とも問題文の「対角成分は全て0」に違反します。辺の2つの端点の自己ループを誤って設定しています。
選択肢 ウ
「adjMatrix[u,v] ← 1」は片方向のみの設定です。有向グラフ(一方向の辺)では正しいですが、無向グラフでは双方向([u,v]と[v,u]の両方)を設定する必要があります。対称行列にならないため無向グラフの表現として不完全です。
選択肢 オ
「adjMatrix[v,u] ← 1」も片方向のみです。選択肢cと対称で、[v,u]方向のみを設定しています。無向グラフでは両方向を設定するDが正解です。
選択肢 カ
「adjMatrix[v,v] ← 1」は頂点vの自己ループを設定します。対角成分は0でなければならないため誤りです。

解くときのポイント

無向グラフの隣接行列:辺{u,v}に対して必ず[u][v]と[v][u]の両方を1に設定(対称行列)。対角成分(自己ループ)は常に0。有向グラフなら[u][v]のみ設定。「無向か有向か」で片方向か双方向かが決まる。