int *visited;
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;
return dfsCycleCheck(g, w);
}
return 0;
}
|