[prev] 4 [next]

Depth-first Traversal

Traverse graph (depth-first, recording visiting order):

int order;     // visiting order
int *visited;  // array of visiting orders
               // indexed by vertex 0..V-1
void dfs(Graph g)
{
   int i;
   visited = calloc(nV(g),sizeof(int));
   order = 1;
   dfsR(g, 0);
}
void dfsR(Graph g, Vertex v)
{
   visited[v] = order++;
   Vertex w;
   for (w = 0; w < nV(g); w++) {      // for each
      if (!hasEdge(g,v,w)) continue;  // neighbour
      if (!visited[w]) dfsR(g, w);
   }
}