private void bfs(Diagraph g, IEnumerable <int> sources) { Queue <int> q = new Queue <int>(); for (int v = 0; v < g.V; v++) { distTo[v] = Int32.MaxValue; } foreach (int s in sources) { distTo[s] = 0; marked[s] = true; q.Enqueue(s); } while (q.Count != 0) { int v = q.Dequeue(); foreach (var i in g.adj(v)) { if (!marked[i]) { edgeTo[i] = v; distTo[i] = distTo[v] + 1; marked[i] = true; q.Enqueue(i); } } } }
public void dfs(Diagraph g, int v) { marked[v] = true; onStack[v] = true; foreach (int w in g.adj(v)) { if (cycle != null) { return; } if (!marked[w]) { edgeTo[w] = v; dfs(g, w); } else if (onStack[w]) { //we have cycle cycle = new Stack <int>(); int i = v; for (; i != w; i = edgeTo[i]) { cycle.Push(i); } cycle.Push(w); cycle.Push(v); return; } } onStack[v] = false; }
public void dfs(Diagraph g, int v) { marked[v] = true; foreach (int w in g.adj(v)) { if (!marked[w]) { edgeTo[w] = v; dfs(g, w); } } }
public void dfs(Diagraph g, int v) { marked[v] = true; connectedId[v] = connectedComponentCounter; foreach (int w in g.adj(v)) { if (!marked[w]) { dfs(g, w); } } }
// run DFS in digraph G from vertex v and compute preorder/postorder private void dfs(Diagraph G, int v) { marked[v] = true; preArr[v] = preCounter++; preorder.Enqueue(v); foreach (int w in G.adj(v)) { if (!marked[w]) { dfs(G, w); } } postorder.Enqueue(v); postArr[v] = postCounter++; }