void graph_bfs(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; queue* Q = queue_create(); queue_add_last(Q, start); while (!queue_empty(Q)) { // vertex_t current = first elt in Q vertex_t current; queue_get_first(Q, ¤t); queue_remove_first(Q); // 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; queue_add_last(Q, neighbors[i]); } } } }