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; }
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 */