応用情報技術者 2017年 春期 午前2 問03
問題文
ノードとノードの間のエッジの有無を、隣接行列を用いて表す。ある無向グラフの隣接行列が次の場合、グラフで表現したものはどれか。ここで、ノードを隣接行列の行と列に対応させて、ノード間にエッジが存在する場合は1で、エッジが存在しない場合は0で示す。


選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
隣接行列と無向グラフ【午前2解説】
正解の理由
与えられた隣接行列を読み取ると、非対角成分の1は次の辺を表します:a―b, b―c, b―d, c―d, c―e, e―f。これらをまとめると、横一列に並べた頂点間で実線・曲線を合わせて表現されている選択肢のうち、実線が a―b, b―c, c―d, e―f で、曲線が b―d と c―e となっているのが ウ の図と一致します。したがって正しいのは ウ です。
解法ステップ
- 隣接行列の行 i 列 j の値が1ならノード i と j の間に辺があると読む(無向グラフなので行列は対称で、i→j と j→i が両方1になる)。
- 対角成分が0なら自己ループはないと判断する。
- 重複を避けるため上三角(i < j)の成分だけ確認し、辺の集合を列挙する。
- 列挙した辺集合と各選択肢の辺集合を比較し、一致する図を選ぶ。
(本問の上三角確認例)上三角の1は次:(a,b)、(b,c)、(b,d)、(c,d)、(c,e)、(e,f) → これがグラフの全辺。
選択肢別の誤答解説
- ア:実線として a―b, c―d, d―e, e―f を挙げているが、実際の行列では d―e は存在しない(d と e の位置は0)。一方で行列にある b―c の辺がアの実線では欠けている。曲線として b―d と c―e を持つ点は合っているが、実線集合がずれているため不一致となる。したがってアは誤り。
- イ:実線が a―b, b―c, d―e, e―f となっているが、ここでも d―e が余分かつ本来必要な c―d が抜けているため不一致。
- ウ:実線 a―b, b―c, c―d, e―f と曲線 b―d, c―e の組合せが、隣接行列から列挙される辺集合と完全に一致するため正しい。
- エ:実線として a―b, b―c, c―d, d―e, e―f を挙げているが、d―e が実際には存在しない(行列の該当成分は0)ため誤り。
よくある誤解
- 行列を行方向だけで読んで「有向辺」として扱うミス:無向グラフでは行列は対称で、片方だけ見て決めないこと。上三角または下三角だけを見れば重複を避けられる。
- 図の「実線」と「曲線」をタイプの異なる辺と混同する:本問ではいずれも単なる辺の表現であり、種類に差はない。重要なのはどの頂点ペアが結ばれているかだけ。
- 選択肢の辺を読み違えて「辺がある/ない」を逆に解釈する(特に複数の近接頂点がある場合に見落としがち)。
補足コラム
隣接行列からエッジ一覧を作る作業は手作業でも簡単ですが、プログラムで確実に処理するとミスを防げます。以下は上三角だけをチェックして辺リストを作る簡単な例です。
A = [
[0,1,0,0,0,0],
[1,0,1,1,0,0],
[0,1,0,1,1,0],
[0,1,1,0,0,0],
[0,0,1,0,0,1],
[0,0,0,0,1,0]
]
nodes = ['a','b','c','d','e','f']
edges = []
n = len(A)
for i in range(n):
for j in range(i+1, n):
if A[i][j] == 1:
edges.append((nodes[i], nodes[j]))
print(edges) # [('a','b'),('b','c'),('b','d'),('c','d'),('c','e'),('e','f')]
このようにして得た辺集合を、選択肢の図示と突き合わせれば確実に正答が導けます。
FAQ
Q. 隣接行列が対称でない場合は?
A. その場合は有向グラフを表している可能性が高いです。行列の (i,j) と (j,i) が異なると、向きのある辺(有向辺)であると解釈します。
A. その場合は有向グラフを表している可能性が高いです。行列の (i,j) と (j,i) が異なると、向きのある辺(有向辺)であると解釈します。
Q. 対角に1があるとどう読む?
A. 対角の1は自己ループ(頂点が自身と接続)を示します。本問は全て0なので自己ループはありません。
A. 対角の1は自己ループ(頂点が自身と接続)を示します。本問は全て0なので自己ループはありません。
Q. 頂点の並び順が違ったら?
A. 隣接行列は行・列の順序に依存します。選択肢の図が同じ辺集合を持っていても頂点順が入れ替わっていれば同一図とは判断できないので、問題文の対応規則(ここでは左から a,b,c,d,e,f の順)に従って比較してください。
A. 隣接行列は行・列の順序に依存します。選択肢の図が同じ辺集合を持っていても頂点順が入れ替わっていれば同一図とは判断できないので、問題文の対応規則(ここでは左から a,b,c,d,e,f の順)に従って比較してください。
関連キーワード: 隣接行列、無向グラフ、上三角抽出、隣接リスト、グラフ変換

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

