void graph_dfs(graph *G, vertex_t start, vertex_t* parent) { size_t i; size_t n = graph_vertex_count(G); bool marked[n]; for (i = 0; i < n; ++i) { parent[i] = i; marked[i] = false; } marked[start] = true; stack* S = stack_create(); stack_add_to_top(S, start); while (!stack_empty(S)) { // vertex_t current = top elt of S vertex_t current; stack_get_top(S, ¤t); stack_remove_top(S); // vertex_t neighbors[n] = neighbors of current size_t current_deg; graph_degree(G, current, ¤t_deg); vertex_t neighbors[n]; graph_neighbors(G, current, neighbors); for (i = 0; i < current_deg; ++i) { if (!marked[neighbors[i]]) { marked[neighbors[i]] = true; parent[neighbors[i]] = current; stack_add_to_top(S, neighbors[i]); } } } }