public static System.Collections.Generic.IEnumerable <T> Sort <T, E> (IGraph <T, E> graph, IEnumerable <T> source) where E : IEdge <T> { Dictionary <T, bool> Visited = new Dictionary <T, bool>(); StackQueue <T> Stack = new StackQueue <T>(); foreach (T v in graph.Vertices) { Visited[v] = false; } foreach (T v in source) { Stack.Push(v); } while (Stack.Count != 0) { T u = Stack.Pop(); Visited[u] = true; yield return(u); foreach (T v in graph.ReversePredecessors(u)) { if (!Visited[v] && !Stack.Contains(v)) { Stack.Push(v); } } } }
public System.Collections.Generic.IEnumerator <T> GetEnumerator() { foreach (T v in graph.Vertices) { Visited[v] = false; } for (T s = Source; s != null;) { Stack.Push(s); int j = graph.NameSpace.BijectFromBasetype(s); BinaryTreeLinkListVertex <T> ver = graph.VertexSpace[j]; s = ver.Left.Name; } while (Stack.Count != 0) { T u = Stack.Pop(); yield return(u); int j = graph.NameSpace.BijectFromBasetype(u); BinaryTreeLinkListVertex <T> ver = graph.VertexSpace[j]; u = ver.Right.Name; while (u != null) { Stack.Push(u); int k = graph.NameSpace.BijectFromBasetype(u); BinaryTreeLinkListVertex <T> z = graph.VertexSpace[k]; u = ver.Right.Name; u = z.Left.Name; } } }