void BuscaEmLargura(TipoGrafo *Grafo) { int Dist[MaxNumvertices + 1]; TipoCor Cor[MaxNumvertices + 1]; int Antecessor[MaxNumvertices + 1]; TipoValorVertice x; for (x = 0; x <= Grafo->NumVertices - 1; x++) { Cor[x] = branco; Dist[x] = Infinito; Antecessor[x] = -1; } for (x = 0; x <= Grafo->NumVertices - 1; x++) { if (Cor[x] == branco) { VisitaBfs(x,Grafo, Dist, Cor, Antecessor ); printf("Caminho de %d ate %d\n", x, Grafo->NumVertices - 1); ImprimeCaminho(x, Grafo->NumVertices - 1, Grafo, Dist, Cor, Antecessor); putchar('\n'); } } }
//Função que irá calcular a distancia entre cada delegacia e todos os demais vértices do grafo. //Recebe como parametro o Grafo, o vértice quue contem a delegacia e a Matriz com as Distancias e Flags para os vértices void BuscaEmLargura(TipoGrafo *Grafo, int localiza, int **Dist){ TipoVertice x; TipoCor *Cor; int *Antecessor; Cor = (TipoCor*)malloc(Grafo->NumVertices*sizeof(TipoCor)); Antecessor=(int*)malloc(Grafo->NumVertices*sizeof(int)); for (x = 0; x <= Grafo->NumVertices - 1; x++){ //Processo para preencher como Infinito as distancias entre todos o vértices e a Delegacia. Cor[x] = branco; Dist[x][0] = INFINITO; Antecessor[x] = -1; } for (x = localiza; x <= Grafo->NumVertices - 1 + localiza; x++){//Inicio do Processo de Visitas aos vizinhos if (Cor[localiza] == branco){ VisitaBfs(localiza, Grafo, Dist, Cor, Antecessor); } } free(Cor); free(Antecessor); }