void BFS(int graph[MAXN][MAXN], int raiz, int N) { int fila[MAXN], i, inicioFila = 0, fimFila = -1, inicioComponente = 0, fimComponente = -1; int atual; cor[raiz] = CINZA; inicFila(fila); inicFila(componente); insereFila(fila, inicioFila, &fimFila, raiz); insereFila(componente, inicioComponente, &fimComponente, raiz); while(!filaVazia(fila, inicioFila, fimFila)) { atual = retiraFila(fila, &inicioFila, fimFila); for (i = 0; i < N; i++) { if(i != atual) { if(graph[atual][i] > 0) { if(cor[i] == BRANCO) { cor[i] = CINZA; insereFila(fila, inicioFila, &fimFila, i); insereFila(componente, inicioComponente, &fimComponente, i); } } } } cor[atual] = PRETO; } }
void buscaLargura(Grafo g, int partida) { int i, v, a, w; Fila fila = criaFila(); Lista listaBrancos = criaLista(); Lista listaPretos = criaLista(); Lista listaVisitados = criaLista(); for(i = GVprimeiroVertice(g); i != 0; i = GVproximoVertice(g, i)) { insereNaLista(listaBrancos, i); } printf("Todas os vértices estão brancos.\n"); printf("Nenhuma aresta foi visitada.\n"); v = partida; printf("O vertice %d está cinza.\n", v); insereFila(fila, v); retiraLista(listaBrancos, pegaPosLista(listaBrancos, v)); while(!vaziaFila(fila)) { v = retiraFila(fila); printf("Vertice %d ativado.\n", v); for(a = GAprimaSaida(g,v); a != 0; a = GAproxSaida(g,v,a)) { insereNaLista(listaVisitados, a); printf("A aresta %d foi visitada.\n", a); w = GVvizinho(g,a,v); if(existeNaLista(listaBrancos, w)) { insereFila(fila, w); printf("O vertice %d está cinza.\n", w); retiraLista(listaBrancos, pegaPosLista(listaBrancos, w)); } } insereNaLista(listaPretos, v); printf("O vertice %d está preto.\n", v); printf("Vertice %d desativado.\n", v); } destroiLista(listaBrancos); destroiLista(listaPretos); destroiFila(fila); }