Из списка смежных вершин получить матрицу инцидентности - C#
Формулировка задачи:
Здравствуйте. Подскажите пожалуйста в следующем вопросе.
Мне необходимо получить матрицу инцидентности из списка смежных вершин. Искал долго и упорно, но найти ответ так и не смог. Понятие, что такое матрица инцидентности и список смежных вершин есть, но переход от одного к другому застал меня в ступор.Как это сделать можно? Очень хотелось бы, чтобы была подсказка , как реализовать на C++/C# .
Пожалуйста помогите !!!
Решение задачи: «Из списка смежных вершин получить матрицу инцидентности»
textual
Листинг программы
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;
}
}
}