コード例 #1
0
        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);
        }