Пример #1
0
int main(int argc, char *argv[])
{  /*-- Programa principal --*/
  /* -- NumVertices: definido antes da leitura das arestas --*/
  /* -- NumArestas: inicializado com zero e incrementado a --*/
  /* -- cada chamada de InsereAresta                       --*/
  printf("No. vertices:");
  scanf("%d%*[^\n]", &NVertices);
  printf("No. arestas:");
  scanf("%d%*[^\n]", &NArestas);
  Grafo.NumVertices = NVertices;
  Grafo.NumArestas = 0;
  FGVazio(&Grafo);
  for (i = 0; i <= NArestas - 1; i++) 
    { printf("Insere V1 -- V2 -- Peso:");
      scanf("%d*[^\n]", &V1);
      scanf("%d*[^\n]", &V2);
      scanf("%d*[^\n]", &Peso);
      getchar();
      Grafo.NumArestas++;
      InsereAresta(&V1, &V2, &Peso, &Grafo);   /*1 chamada : G direcionado*/
      InsereAresta(&V2, &V1, &Peso, &Grafo);   /*2 chamadas: G nao-direcionado*/
    }
  ImprimeGrafo(&Grafo);
  getchar();
  BuscaEmLargura(&Grafo);
  getchar();
 return 0; 
}
Пример #2
0
int main() {
  
  Grafo g;
  int n;
  int u, v, p, r;
  int *dist;
  int achou;
  
  /* Número de vértices */
  if ((scanf("%d",&n)!=1) || (n<0) || (n>TAM_MAX))
    DadosErrados();
  
  g = CriaGrafoVazio(n);
  if ((dist=MALLOC(sizeof(int)*n))==NULL) {
    printf("Memória esgotada\n");
    return 0;
  }

  /* Leitura de arestas */
  while (1) {
    if (scanf("%d %d %d",&u,&v,&p)!=3)
      DadosErrados();
    if (u==-1)
      break;
    if (AcrescentaAresta(g,u,v,p)!=CERTO)
      DadosErrados();
  } /* break */
  ImprimeGrafo(g);
  
  /* Aplicação do algoritmo de Dijkstra */
  while (1) {
    if (scanf("%d",&r)!=1)
      DadosErrados();
    if (r==-1)
      break;
    if ((r<0) || (r>=n))
      DadosErrados();
    printf("Caminhos mínimos a partir do vértice %d:\n",r);
    Dijkstra(g,r,dist);
    achou = 0;
    for (v=0; v<n; v++) {
      if ((v!=r) && (dist[v]!=INT_MAX)) {
	printf("%3d:  %d\n",v,dist[v]);
        achou++;
      }
    }
    if (achou==0)
      printf("  nenhum\n");
  } /* break */

  LiberaGrafo(g);
  
  FREE(dist);
  
  bapply(bprint);

  printf("Processamento terminado\n");

  return 0;

} /* main */