グラフ理論と隣接行列

グラフとは何か?
隣接行列とは何か?
そして隣接リストは実装が難しい。

ここでは隣接行列について書く。
グラフを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("");
        }
        
    }
}

この記事が気に入ったらサポートをしてみませんか?