辺の配列から隣接行列への変換

■ 解き方の方針 edgeListの一要素{u, v}が、隣接行列のどの成分を1にするかを考えます。ポイントは、対象が 無向グラフ であることです。 ■ 一つの辺を行列に反映する 頂点uと頂点vの間に辺があるので、 adjMatrix[u, v] ← 1 とします。 辺に向きがなく、vからuにも接続しているので、 adjMatrix[v, u] ← 1 も必要です。 この二つを同時に設定すると、adjMatrix[u, v]とadjMatrix[v, u]が等しくなり、問題文どおりの対称行列になります。 ■ 対角成分との違い adjMatrix[u, u]やadjMatrix[v, v]は、頂点から同じ頂点への自己ループを表します。問題の辺{u, v}を表す成分ではないので、ここを1にする選択肢は誤りです。 ■ 正解と誤答の見分け方 したがって、正解は エ です。 片方の成分だけを1にするウやオは、有向グラフの一方向だけを記録する形になり、無向グラフの条件を満たしません。

次のプログラム中の    に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。

図1に示すグラフの頂点には 1から順に整数で番号が付けられている。グラフは無向グラフであり、各頂点間には高々一つの辺がある。一つの辺は両端の頂点の番号を要素にもつ要素数2の整数型の配列で表現できる。例えば、 {1, 3} は頂点1と頂点3を端点とする辺を表す。グラフ全体は、グラフに含まれる辺を表す要素数2の配列を全て格納した配列(以下,辺の配列という)で表現できる。辺の配列の要素数はグラフの辺の個数と等しい。図1のグラフは整数型配列の配列{{1, 3}, {1, 4}, {3, 4}, {2, 4}, {4, 5}}と表現できる。

問題画像

関数 edgesToMatrixは、辺の配列を隣接行列に変換する。隣接行列とは、グラフに含まれる頂点の個数と等しい行数及び列数の正方行列で、i行j列の成分は頂点iと頂点jを結ぶ辺があるときに1となり、それ以外は0となる。行列の対角成分は全て0で、無向グラフの場合は対称行列になる。図1のグラフを表現する隣接行列を図2に示す。

問題画像

関数 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

空欄に入れる処理

ア

adjMatrix[u, u] ← 1

イ

adjMatrix[u, u] ← 1
adjMatrix[v, v] ← 1

ウ

adjMatrix[u, v] ← 1

エ

adjMatrix[u, v] ← 1
adjMatrix[v, u] ← 1

オ

adjMatrix[v, u] ← 1

カ

adjMatrix[v, v] ← 1