private void dfs(DiGraph g, int v) { marked[v] = true; sc.Last().Add(v); foreach (int w in g.Adj(v)) { if (!marked[w]) { dfs(g, w); } } }
private void dfs(DiGraph g, int s) { nodes[s].Color = VertexColor.Gray; nodes[s].Discovered = ++time; foreach (int w in g.Adj(s)) { if (nodes[w].Color == VertexColor.White) { nodes[w].Parent = nodes[s]; dfs(g, w); } } nodes[s].Color = VertexColor.Black; nodes[s].Finished = ++time; postOrder.Enqueue(s); }
private void bfs(DiGraph g, int s) { nodes[s].Parent = null; nodes[s].Distance = 0; nodes[s].Color = VertexColor.Gray; Queue <int> queue = new Queue <int>(); queue.Enqueue(s); while (queue.Count != 0) { int u = queue.Dequeue(); foreach (var v in g.Adj(u)) { if (nodes[v].Color == VertexColor.White) { nodes[v].Color = VertexColor.Gray; nodes[v].Distance = nodes[u].Distance + 1; nodes[v].Parent = nodes[u]; queue.Enqueue(v); } } nodes[u].Color = VertexColor.Black; } }