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);
         }
     }
 }
Beispiel #2
0
 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;
            }
        }