public bool Check(Edge[] cycle, out string message) { var v = cycle.Select(e => e.From).GroupBy(c => c) .Where(grp => grp.Count() > 1).Select(grp => grp.Key); if (v.Any()) { message = $"Wierzchołek {v.First()} występuje wielokrotnie"; return(false); } foreach (var e in cycle) { if (!g.ContainsEdge(e)) { message = $"Nieprawidłowa krawędź: {e}"; return(false); } } for (int i = 0; i < cycle.Length; ++i) { if (cycle[i].To != cycle[(i + 1) % cycle.Length].From) { message = $"{cycle[i]}, {cycle[(i+1) % cycle.Length]} nie są kolejnymi krawędziami cyklu"; return(false); } } message = "OK"; return(true); }