Из списка смежных вершин получить матрицу смежности C#
Как получить матрицу смежности, если вершины графа формата string и задаются буквами?
var edges = new List<Tuple<string, string>>();
//список смежности
edges.Add(new Tuple<string, string>("A", "B"));
edges.Add(new Tuple<string, string>("B", "C"));
Пример для графа с вершинами формата int:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication173
{
class Program
{
static void Main(string[] args)
{
var edges = new List<Tuple<int, int>>();
//список смежности
edges.Add(new Tuple<int, int>(1, 2));
edges.Add(new Tuple<int, int>(2, 3));
edges.Add(new Tuple<int, int>(1, 3));
edges.Add(new Tuple<int, int>(3, 4));
//матрица инцидентности
var matrix = GetIncidenceMatrix(edges);
for (int i = 0; i < matrix.GetLength(0); i++)
{
Console.WriteLine();
for (int j = 0; j < matrix.GetLength(1); j++)
Console.Write(matrix[i, j] + " ");
}
Console.ReadLine();
}
private static int[,] GetIncidenceMatrix(List<Tuple<int, int>> edges, bool oriented = false)
{
var maxEdgeNumber = edges.Select(t => Math.Max(t.Item1, t.Item2)).Max();
var result = new int[maxEdgeNumber, edges.Count];
for (int i = 0; i < edges.Count;i++)
{
var edge = edges[i];
result[edge.Item1 - 1, i] = oriented ? -1 : 1;
result[edge.Item2 - 1, i] = 1;
}
return result;
}
}
}