예제 #1
0
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');
      }
    }
}
예제 #2
0
//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);

}