[prev] 10 [next]

Exercise 2: Buggy Cycle Check

This DFS cycle check has a bug. Fix it.

int *visited;  // array [0..V-1] of booleans

int hasCycle(Graph g)
{
   visited = calloc(nV(g),sizeof(int));
   int result = dfsCycleCheck(g, 0);
   free(visited);
   return result;
}
int dfsCycleCheck(Graph g, Vertex v)
{
   visited[v] = 1;
   Vertex w;
   for (w = 0; w < nV(g); w++) {
      if (!hasEdge(g,v,w)) continue;
      if (visited[w]) return 1; // found cycle
      return dfsCycleCheck(g, w);
   }
   return 0; // no cycle at v
}