public override void Traverse(int Source, ProcessEdge callback, PreProcessvertex preProcessVertex) { if (VertexState[Source] == State.Undiscovered) { VertexState[Source] = State.Discovered; time++; EntryTime[Source] = time; preProcessVertex(G, Source); foreach (Edge edge in G[Source]) { if (VertexState[edge.Y] == State.Undiscovered) { Parent[edge.Y] = Source; callback(G, Source, edge); Traverse(edge.Y, callback, preProcessVertex); } else if (VertexState[edge.Y] != State.Processed || G.IsDirected) { if (Parent[Source] != edge.Y) { callback(G, Source, edge); } } } VertexState[Source] = State.Processed; time++; ExitTime[Source] = time; } }
public override void Traverse(int Source, ProcessEdge callback, PreProcessvertex preProcessVertex) { if (VertexState[Source] == State.Undiscovered) { Queue <int> queue = new Queue <int>(); queue.Enqueue(Source); VertexState[Source] = State.Discovered; Parent[Source] = -1; while (queue.Count > 0) { int vertex = queue.Dequeue(); preProcessVertex(G, vertex); foreach (Edge edge in G[vertex]) { if (VertexState[edge.Y] != State.Processed || G.IsDirected) { callback(G, vertex, edge); } if (VertexState[edge.Y] == State.Undiscovered) { queue.Enqueue(edge.Y); VertexState[edge.Y] = State.Discovered; Parent[edge.Y] = vertex; } } VertexState[vertex] = State.Processed; } } }
public override void Traverse(int Source, ProcessEdge callback, PreProcessvertex preProcessVertex) { if (VertexState[Source] == State.Undiscovered) { Queue<int> queue = new Queue<int>(); queue.Enqueue(Source); VertexState[Source] = State.Discovered; Parent[Source] = -1; while (queue.Count > 0) { int vertex = queue.Dequeue(); preProcessVertex(G, vertex); foreach (Edge edge in G[vertex]) { if (VertexState[edge.Y] != State.Processed || G.IsDirected) callback(G, vertex, edge); if (VertexState[edge.Y] == State.Undiscovered) { queue.Enqueue(edge.Y); VertexState[edge.Y] = State.Discovered; Parent[edge.Y] = vertex; } } VertexState[vertex] = State.Processed; } } }
public abstract void Traverse(int Source, ProcessEdge callback, PreProcessvertex preProcessVertex);
public override void Traverse(int Source, ProcessEdge callback, PreProcessvertex preProcessVertex) { if (VertexState[Source] == State.Undiscovered) { VertexState[Source] = State.Discovered; time++; EntryTime[Source] = time; preProcessVertex(G, Source); foreach (Edge edge in G[Source]) { if (VertexState[edge.Y] == State.Undiscovered) { Parent[edge.Y] = Source; callback(G, Source, edge); Traverse(edge.Y, callback, preProcessVertex); } else if (VertexState[edge.Y] != State.Processed || G.IsDirected) if (Parent[Source] != edge.Y) callback(G, Source, edge); } VertexState[Source] = State.Processed; time++; ExitTime[Source] = time; } }