グラフ理論と隣接行列
グラフとは何か?
隣接行列とは何か?
そして隣接リストは実装が難しい。
ここでは隣接行列について書く。
グラフをNxNの行列で表現した物が隣接行列だ。(正確ではないかもしれない)
多分な、隣接しているノードを表現するから隣接行列というんだろう。
グラフとは葉と葉が枝で繋がってる図を見かけるあれの事である。(無効グラフ、有効グラフ、重み付き無効グラフ、重み付き有効グラフ などある。)
隣接行列はプログラムでグラフを扱う時に重宝するらしいが
利点としては
弱点としてメモリの消費が増えていく。
ノード数Nの場合、N^2のメモリを消費していく。N×Nの行列を使用するため。
グラフの種類によって行列の内容が変わる。
図が無いと説明が難しい。
初見で分からなかった事がある:配列の添え字とグラフの関係だ
0 → 1へ向かう場合には array[0,1] が対応しているのだ。
単純な「無効グラフ」での隣接行列を出力する。
入力値と結果は省略する。
using System;
class Program
{
static void Main()
{
var line1 = Console.ReadLine();
var N = int.Parse(line1);
int[,] nodeArray = new int[N,N];
while(true)
{
var line = Console.ReadLine()?.Trim().Split(' ');;
if(line == null)
{
break;
}
nodeArray[int.Parse(line[0])-1, int.Parse(line[1])-1] = 1;
nodeArray[int.Parse(line[1])-1, int.Parse(line[0])-1] = 1;
}
print(nodeArray, N);
}
static void print(int[,] array, int N)
{
for(int i=0; i<N; i++)
{
for(int j=0; j< N; j++)
{
Console.Write(array[i, j]);
if(j+1>=N){
break;
}
Console.Write(" ");
}
Console.WriteLine("");
}
}
}
この記事が気に入ったらサポートをしてみませんか?