bfs(graph *g, int start) { queue q; /* queue of vertices to visit */ int v; /* current vertex */ int i; /* counter */ init_queue(&q); enqueue(&q,start); discovered[start] = TRUE; while (empty(&q) == FALSE) { v = dequeue(&q); process_vertex(v); processed[v] = TRUE; for (i=0; i<g->degree[v]; i++) if (valid_edge(g->edges[v][i]) == TRUE) { if (discovered[g->edges[v][i]] == FALSE) { enqueue(&q,g->edges[v][i]); discovered[g->edges[v][i]] = TRUE; parent[g->edges[v][i]] = v; } if (processed[g->edges[v][i]] == FALSE) process_edge(v,g->edges[v][i]); } } }
dfs(graph *g, int v) { int i; /* counter */ int y; /* successor vertex */ if (finished) return; /* allow for search termination */ discovered[v] = TRUE; process_vertex(v); for (i=0; i<g->degree[v]; i++) { y = g->edges[v][i]; if (valid_edge(g->edges[v][i]) == TRUE) { if (discovered[y] == FALSE) { parent[y] = v; dfs(g,y); } else if (processed[y] == FALSE) process_edge(v,y); } if (finished) return; } processed[v] = TRUE; }
int bfs(int start, bool process_flag) { queue q; /* cola con nodos a visitar */ int v; /* nodo actual */ int i; /* contador */ init_queue(&q); enqueue(&q, start); s.discovered[start] = TRUE; while(is_empty(&q) == FALSE){ v = dequeue(&q); if (process_flag) process_vertex(v); for (i=0; i < g.degree[v]; i++){ if(edge_not_arc(v,g.edges[v][i]) == TRUE) { if (s.discovered[g.edges[v][i]] == FALSE) { enqueue(&q,g.edges[v][i]); s.discovered[g.edges[v][i]] = TRUE; s.parent[g.edges[v][i]] = v; } } } } return 0; }