示例#1
0
        private static IEnumerable <IMapping> FindChildren(IMapping Mapping, Graph <IMapping> graph)
        {
            var ResultList    = new List <IMapping>();
            var StartingNodes = new Vertex <IMapping>[] { graph.Vertices.First(x => x.Data == Mapping) }.ToList();

            while (StartingNodes.Count > 0)
            {
                var Vertex = StartingNodes.First();
                StartingNodes.Remove(Vertex);
                ResultList.AddIfUnique(Vertex.Data);
                foreach (Edge <IMapping> Edge in Vertex.OutgoingEdges.ToList())
                {
                    Vertex <IMapping> Sink = Edge.Sink;
                    Edge.Remove();
                    if (Sink.IncomingEdges.Count == 0)
                    {
                        ResultList.AddIfUnique(Sink.Data);
                        StartingNodes.AddIfUnique(Sink);
                    }
                }
            }
            return(ResultList);
        }