/// <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); }