//Função que irá Visitar os vizinhos, enfileirar, desenfileirar de acordo com a cor de cada vértice void VisitaBfs(TipoVertice u, TipoGrafo *Grafo, int **Dist, TipoCor *Cor, int *Antecessor){ TipoVertice v; TipoApontador Aux; short FimListaAdj; TipoPeso Peso; TipoItem Item; TipoFila Fila; Cor[u] = cinza; Dist[u][0] = 0; FFVazia(&Fila); Item.Vertice = u; Item.Peso = 0; Enfileira(Item, &Fila); while (!FilaVazia(Fila)){ Desenfileira(&Fila, &Item); u = Item.Vertice; if (!ListaAdjVazia(&u, Grafo)){ Aux = PrimeiroListaAdj(&u, Grafo); FimListaAdj = FALSE; while (FimListaAdj == FALSE){ ProxAdj(&u, Grafo, &v, &Peso, &Aux, &FimListaAdj); if (Cor[v] == branco){ Cor[v] = cinza; Dist[v][0] = Dist[u][0] + 1; Antecessor[v] = u; Item.Vertice = v; Item.Peso = Peso; Enfileira(Item, &Fila);} } } Cor[u] = preto; } }
void VisitaBfs(TipoValorVertice u, TipoGrafo *Grafo, int *Dist, TipoCor *Cor, int *Antecessor) { TipoValorVertice v; Apontador Aux; short FimListaAdj; TipoPeso Peso; TipoItem Item; TipoFila Fila; Cor[u] = cinza; Dist[u] = 0; FFVazia(&Fila); Item.Vertice = u; Item.Peso = 0; Enfileira(Item, &Fila); printf("Visita origem%2d cor: cinza F:", u); ImprimeFila(Fila); getchar(); while (!FilaVazia(Fila)) { Desenfileira(&Fila, &Item); u = Item.Vertice; if (!ListaAdjVazia(&u, Grafo)) { Aux = PrimeiroListaAdj(&u, Grafo); FimListaAdj = FALSE; while (FimListaAdj == FALSE) { ProxAdj(&u, &v, &Peso, &Aux, &FimListaAdj); if (Cor[v] != branco) continue; Cor[v] = cinza; Dist[v] = Dist[u] + 1; Antecessor[v] = u; Item.Vertice = v; Item.Peso = Peso; Enfileira(Item, &Fila); } } Cor[u] = preto; printf("Visita%2d Dist%2d cor: preto F:", u, Dist[u]); ImprimeFila(Fila); getchar(); } } /* VisitaBfs */