int main(void) { grafo g = le_grafo(stdin); long int d = diametro(g); printf("%s\n", nome(g)); printf("%sdirecionado\n", direcionado(g) ? "" : "não "); if ( direcionado(g) ) printf("%sfortemente conexo\n", fortemente_conexo(g) ? "" : "não "); else printf("%sconexo\n", conexo(g) ? "" : "des"); if ( d == infinito ) printf("diâmetro: oo\n"); else printf("diâmetro: %ld\n", d); destroi_grafo(escreve_grafo(stdout, distancias(g))); printf("\n"); return ! destroi_grafo(g); }
//------------------------------------------------------------------------------ int main(void) { return ! destroi_grafo(escreve_grafo(stdout, le_grafo(stdin))); }
int main() { enum Options {INSERE_VERTEX = 1, REMOVE_VERTEX = 2, INSERE_ARESTA = 3, REMOVE_ARESTA = 4, CALCULA_DISTANCIA = 5, GRAFO_CONEXO = 6, GRAFO_CONSISTENTE = 7}; char answer, origem[TAM_MAX], destino[TAM_MAX]; char input_name[TAM_MAX], output_name[TAM_MAX]; int option, type; float peso; FILE *input = NULL, *output = NULL; TpGrafo grafo; TpVertex vertex1; printf("Digite o nome do arquivo de entrada:\n"); scanf("%[^\n]", input_name); getchar(); input = fopen(input_name, "r"); printf("Digite o nome do arquivo de saida:\n"); scanf("%[^\n]", output_name); getchar(); output = fopen(output_name, "w"); assert(input != NULL && output != NULL); le_grafo(input, &grafo); printf("\nPrograma para realizar operacoes sobre um grafo.\n\n"); printf("Digite a operacao que deseja realizar:\n"); printf("[1] Insere vertice.\n"); printf("[2] Remove vertice.\n"); printf("[3] Insere aresta.\n"); printf("[4] Remove aresta.\n"); printf("[5] Calcula distancia.\n"); printf("[6] Verifica se o grafo e conexo.\n"); printf("[7] Verifica se o grafo e consistente.\n"); printf("[8] Sai da aplicacao.\n"); scanf("%d", &option); getchar(); while(option < 1 || option > 8) { printf("Valor invalido. Tente novamente.\n"); printf("[1] Insere vertice.\n"); printf("[2] Remove vertice.\n"); printf("[3] Insere aresta.\n"); printf("[4] Remove aresta.\n"); printf("[5] Calcula distancia.\n"); printf("[6] Verifica se o grafo e conexo.\n"); printf("[7] Verifica se o grafo e consistente.\n"); printf("[8] Sai da aplicacao.\n"); scanf("%d", &option); getchar(); } while(option != 8) { switch (option) { case INSERE_VERTEX: printf("Digite o nome do vertice que sera inserido:\n"); fgets(vertex1.nome, TAM_MAX, stdin); vertex1.id = grafo.numero_vertices; printf("O vertice e origem [s/n]?\n"); scanf("%c", &answer); while(answer != 's' && answer != 'n') { printf("Resposta invalida. Tente novamente.\n"); printf("O vertice e origem [s/n]?\n"); scanf("%c", &answer); } answer == 's'? type = ORIGEM: type = NAO_ORIGEM; insere_vertex(&grafo, vertex1, type); break; case REMOVE_VERTEX: printf("Deseja proceder com a operacao [s/n]? O grafo pode se tornar inconsistente.\n"); while(answer != 's' && answer != 'n') { printf("Resposta invalida. Tente novamente.\n"); printf("Deseja proceder com a operacao [s/n]? O grafo pode se tornar inconsistente.\n"); scanf("%c", &answer); } if(answer == 'n') { break; } printf("Digite o nome do vertice que sera retirado:\n"); fgets(vertex1.nome, TAM_MAX, stdin); remove_vertex(&grafo, &vertex1, vertex1.nome); break; case INSERE_ARESTA: printf("Digite o nome da origem da aresta que sera criada:\n"); fgets(origem, TAM_MAX, stdin); printf("Digite o nome do destino da aresta que sera criada:\n"); fgets(destino, TAM_MAX, stdin); printf("Digite o peso entre os vertices:n"); scanf("%f", &peso); insere_aresta(&grafo, origem, destino, peso); break; case REMOVE_ARESTA: printf("Digite o nome da origem da aresta que sera retirada:\n"); fgets(origem, TAM_MAX, stdin); printf("Digite o nome do destino da aresta que sera retirada:\n"); fgets(destino, TAM_MAX, stdin); remove_aresta(&grafo, origem, destino); break; case CALCULA_DISTANCIA: printf("Digite o nome da origem para o calculo da distancia:\n"); fgets(origem, TAM_MAX, stdin); printf("Digite o nome do destino para o calculo da distancia:\n"); fgets(destino, TAM_MAX, stdin); calculaDistancia(&grafo, origem, destino); break; case GRAFO_CONEXO: grafoConexo(&grafo) == EXIT_SUCCESS? printf("O grafo e conexo.\n"): printf("O grafo nao e conexo.\n"); break; case GRAFO_CONSISTENTE: grafoConsistente(&grafo) == EXIT_SUCCESS? printf("O grafo e consistente.\n"): printf("O grafo nao e consistente.\n"); break; default: printf("ERRO!\n"); } printf("Digite a operacao que deseja realizar:\n"); printf("[1] Insere vertice.\n"); printf("[2] Remove vertice.\n"); printf("[3] Insere aresta.\n"); printf("[4] Remove aresta.\n"); printf("[5] Calcula distancia.\n"); printf("[6] Verifica se o grafo e conexo.\n"); printf("[7] Verifica se o grafo e consistente.\n"); printf("[8] Sai da aplicacao.\n"); scanf("%d", &option); getchar(); while(option < 1 || option > 8) { printf("Valor invalido. Tente novamente.\n"); printf("[1] Insere vertice.\n"); printf("[2] Remove vertice.\n"); printf("[3] Insere aresta.\n"); printf("[4] Remove aresta.\n"); printf("[5] Calcula distancia.\n"); printf("[6] Verifica se o grafo e conexo.\n"); printf("[7] Verifica se o grafo e consistente.\n"); printf("[8] Sai da aplicacao.\n"); scanf("%d", &option); getchar(); } } escreve_grafo(output, &grafo); destroi_grafo(&grafo); printf("Fim da execucao da aplicacao.\n"); printf("Pressione a tecla 'enter' para encerrar.\n"); getchar(); return 0; }
//------------------------------------------------------------------------------ int main(void) { struct grafo *g, *d, *c; struct vertice *v; struct no *n; lista l; g = le_grafo(stdin); escreve_grafo(stdout, g); if((l = ordena(g)) != NULL) { for(n = primeiro_no(l); n != NULL; n = proximo_no(n)) { v = (struct vertice *) conteudo(n); fprintf(stdout, "%s\n", nome_vertice(v)); } destroi_lista(l, nao_destroi_nos); } if((l = componentes(g)) != NULL) { for(n = primeiro_no(l); n != NULL; n = proximo_no(n)) { c = (struct grafo *) conteudo(n); escreve_grafo(stdout, c); } destroi_lista(l, destroi_grafo); } d = arvore_geradora_minima(g); if(d != NULL) { escreve_grafo(stdout, d); destroi_grafo(d); } /* d = arborescencia_caminhos_minimos(g, v); if(d != NULL) { escreve_grafo(stdout, d); destroi_grafo(d); } */ d = distancias(g); if(d != NULL) { escreve_grafo(stdout, d); destroi_grafo(d); } fprintf(stdout, "Diametro = %ld\n", diametro(g)); if(conexo(g)) { fprintf(stdout, "Conexo!\n"); } else { fprintf(stdout, "Não é conexo!\n"); } if(fortemente_conexo(g)) { fprintf(stdout, "Fortemente conexo!\n"); } else { fprintf(stdout, "Não é fortemente conexo!\n"); } /*if((l_blocos = blocos(g)) != NULL) { fprintf(stderr, "\n--Blocos criados:\n" ); for(n = primeiro_no(l); n != NULL; n = proximo_no(n)) { c = (struct grafo *) conteudo(n); escreve_grafo(stdout, c); } destroi_lista(l_blocos, destroi_grafo); }*/ destroi_grafo(g); return 0; }