Example #1
0
        /// <summary>
        ///     Разделение графа на связанные подграфы
        /// </summary>
        /// <returns></returns>
        public IEnumerable <Graph> GetAllSubGraphs()
        {
            var           list     = new StackListQueue <Graph>();
            List <Vertex> vertexes = Vertices.ToList();

            while (vertexes.Any())
            {
                var stackListQueue = new StackListQueue <Vertex> {
                    vertexes.First()
                };
                var list1 = new VertexUnsortedCollection();
                while (stackListQueue.Any())
                {
                    Vertex pop = stackListQueue.Pop();
                    vertexes.Remove(pop);
                    list1.Add(pop);
                    stackListQueue.AddRange(Children[pop].Intersect(vertexes).Except(stackListQueue));
                }
                Dictionary <Vertex, VertexSortedCollection> children = list1.ToDictionary(vertex => vertex,
                                                                                          vertex => Children[vertex]);
                list.Add(new Graph(children));
            }
            return(list);
        }