using System; using System.Collections.Generic; using System.Linq; namespace Assets.Map { public class Graph { public List Vertices { get; internal set; } = new List(); public ISet<(int, int)> Edges { get; internal set; } = new HashSet<(int, int)>(); public void AddEdge(int a, int b) { Edges.Add(a < b ? (a, b) : (b, a)); } public IEnumerable<(int, int)> EdgesOf(int a) { return Edges.Where(x => x.Item1 == a || x.Item2 == a); } public Graph Morph(Func morph) { var result = new Graph() { Edges = Edges }; result.Vertices.AddRange(Vertices.Select(morph)); return result; } public IEnumerable Neighbours(int vertex) { foreach (var (a, b) in this.EdgesOf(vertex)) yield return a == vertex ? b : a; } } }