using System.Collections.Generic; using System.Linq; namespace graphs { enum Color { White, Gray, Black } class Graph where T : notnull { private SortedSet vertices = new SortedSet(); private SortedDictionary> edges = new SortedDictionary>(); public SortedSet Vertices { get => vertices; } public void AddVertex(T u) { vertices.Add(u); edges.Add(u, new SortedSet()); } public void AddEdge(T u, T v) { if (edges.TryGetValue(u, out var edgesFromU)) { edgesFromU.Add(v); } } public bool HasEdge(T u, T v) { if (edges.TryGetValue(u, out var edgesFromU)) { return edgesFromU.Contains(v); } return false; } public IEnumerator GetEdgesFrom(T u) { if (edges.TryGetValue(u, out var edgesFromU)) { return edgesFromU.GetEnumerator(); } return Enumerable.Empty().GetEnumerator(); } } }