int *visited; int **adj; int V; stack S; //stack of nodes (indices) // iterative void DFSearch() { int i, k; for (k = 0; k < V; k++) visited[k] = 0; for (k = V-1; k >= 0; k--) { push(S, k); } while (size(S) > 0) { k = pop(S); if (!visited[k]) { visited[k] = 1; /* Do something to VISIT node k */ for (i = V-1; i >= 0; i--) if (adj[k][i]) push(S, i); } } }