main() { insere_vertice(1); insere_vertice(10); insere_vertice(100); insere_vertice(1000); insere_vertice(10000); insere_vertice(2); printf("\n\n"); insere_aresta(1, 10); insere_aresta(1, 100); insere_aresta(1,1000); insere_aresta(1,10000); insere_aresta(10,10); insere_aresta(10,100); insere_aresta(10,1000); insere_aresta(100,10000); insere_aresta(10000,1); insere_aresta(1000,1); printf("\n\n"); remove_aresta(1000,1); remove_aresta(1,10); remove_aresta(10,1000); remove_aresta(1,2); printf("\n\n"); imprime(); getch(); }
int main(int argc, char const *argv[]) { insere_vertice(1); insere_vertice(10); insere_vertice(100); insere_vertice(1000); insere_vertice(10000); insere_aresta(1, 10); insere_aresta(1, 100); insere_aresta(1, 1000); insere_aresta(10, 100); insere_aresta(100, 1000); insere_aresta(1000, 100); insere_aresta(1000, 100); insere_aresta(10000, 100); insere_aresta(10000, 10); insere_aresta(10000, 1); imprime_grafo(); remove_aresta(10000, 100); imprime_grafo(); remove_aresta(1000, 100); imprime_grafo(); remove_aresta(1, 10); imprime_grafo(); return 0; }
int main(void) { grafo G; define(&G); insere_vertice(&G,'a'); insere_vertice(&G, 'b'); insere_vertice(&G, 'c'); insere_vertice(&G, 'd'); insere_vertice(&G, 'e'); insere_aresta(&G,'b','a'); insere_aresta(&G,'c','a'); insere_aresta(&G,'a','b'); insere_aresta(&G,'c','b'); insere_aresta(&G,'d','b'); insere_aresta(&G,'a','c'); insere_aresta(&G,'b','c'); insere_aresta(&G,'d','c'); insere_aresta(&G,'e','c'); insere_aresta(&G,'b','d'); insere_aresta(&G,'c','d'); insere_aresta(&G,'e','d'); insere_aresta(&G,'c','e'); insere_aresta(&G,'d','e'); vizualiza(&G); remove_vertice(&G, 'd'); printf("\n\n"); vizualiza(&G); printf("\n"); remove_aresta(&G,'c','e'); vizualiza(&G); return 0; }
int main(void){ grafo G; define(&G); char entrada='N'; int data, data2; while(entrada!='@'){ //interface printf("inserir vertice: (V)\n"); printf("inserir aresta: (A)\n"); printf("visualizar grafo: (G)\n"); printf("remover vertice: (R)\n"); printf("remover aresta: (r)\n"); printf("sair: (@)\n"); scanf(" %c",&entrada); //logica do programa if(entrada=='V'){ printf("ensira -1 para sair da entrada de vertices\n"); printf("ensira vertice que deseja: \n"); scanf("%d",&data); while(data!=-1){ insere_vertice(&G,data); scanf("%d",&data); } } else if(entrada=='A'){ printf("ensira -1 para sair da entrada de arestas\n"); printf("ensira a aresta e o vertice que deseja ligar:\n"); scanf("%d %d",&data,&data2); while(data!=-1){ insere_aresta(&G,data,data2); insere_aresta(&G,data2,data); scanf("%d %d",&data,&data2); } } else if(entrada=='G'){ vizualiza(&G); } else if(entrada=='R'){ printf("ensira -1 para sair da remocao de vertice\n"); printf("ensira o vertice que deseja remover\n"); scanf("%d",&data); while(data!=-1){ remove_vertice(&G,data); scanf("%d",&data); } } else if(entrada=='r'){ printf("ensira -1 para sair da remocao de arestas\n"); printf("ensira aresta e o vertice que deseja remover\n"); scanf(" %d %d",&data,&data2); while(data!=-1){ remove_aresta(&G,data,data2); remove_aresta(&G,data2,data); scanf(" %d %d",&data,&data2); } } printf("---------------------------------------------------------------------------\n"); //scanf(" %c",&entrada); } return 0; }
int main(void){ grafo G, lista; define(&G); define(&lista); char entrada='N'; int data, data2; while(entrada!='@'){ //interface printf("inserir vertice: (V)\n"); printf("inserir aresta: (A)\n"); printf("insere aresta ordenada: (o)\n"); printf("visualizar grafo: (G)\n"); printf("remover vertice: (R)\n"); printf("remover aresta: (r)\n"); printf("busca em largura: (l)\n"); printf("busca em profundidade: (p)\n"); printf("retorna Grau da porra tudo: (g)\n"); printf("diz se grafo e conexo: (c)\n"); printf("transforma em matriz de adjacencia: (m)\n"); printf("algoritmo de prim: (i)\n"); printf("algoritmo djikistra: (d)\n"); printf("ensira -1 para sair de qualquer opcao:\n"); printf("sair: (@)\n"); scanf(" %c",&entrada); //logica do programa if(entrada=='V'){ printf("ensira vertice que deseja: \n"); scanf("%d",&data); while(data!=-1){ insere_vertice(&G,data); scanf("%d",&data); } } else if(entrada=='A'){ printf("ensira a aresta, vertice e o custo que deseja ligar:\n"); int custo; scanf("%d %d %d",&data,&data2,&custo); while(data!=-1){ insere_aresta(&G,data,data2,custo); insere_aresta(&G,data2,data,custo); scanf("%d %d %d",&data,&data2,&custo); } } else if(entrada=='G'){ vizualiza(&G); } else if(entrada=='R'){ printf("ensira o vertice que deseja remover\n"); scanf("%d",&data); while(data!=-1){ remove_vertice(&G,data); scanf("%d",&data); } } else if(entrada=='O'){ printf("ensira a aresta, vertice e o custo que deseja ligar-orientado:\n"); int custo; scanf("%d %d %d",&data,&data2,&custo); while(data!=-1){ insere_aresta(&G,data,data2,custo); scanf("%d %d %d",&data,&data2,&custo); } } else if(entrada=='r'){ printf("ensira aresta e o vertice que deseja remover\n"); scanf(" %d %d",&data,&data2); while(data!=-1){ remove_aresta(&G,data,data2); remove_aresta(&G,data2,data); scanf(" %d %d",&data,&data2); } } else if(entrada=='l'){ int distancia[buscamaior(&G)], pai[buscamaior(&G)]; printf("ensira o vertice que deseja fazer busca\n"); scanf(" %d",&data); while(data!=-1){ if(pertence(&G,data)==1){ buscalargura(&G,data,distancia,pai); no *q; q=G.inicio; while(q!=NULL){ printf("%d dista %d do vertice %d\n",q->vertice,distancia[q->vertice],data); q=q->prox; } } scanf(" %d",&data); } } else if(entrada=='p'){ int distancia[buscamaior(&G)], pai[buscamaior(&G)], f[buscamaior(&G)], data; no *q; while(data!=-1){ q=G.inicio; buscaemprofundidade(&G,distancia,f,pai); while(q!=NULL){ printf("%d dista %d com tempo %d\n",q->vertice,distancia[q->vertice],f[q->vertice] ); q=q->prox; } scanf("%d",&data); } free(q); } else if(entrada=='g'){ scanf("%d",&data); while(data!=-1){ printf("o grau eh de %d\n",grauVertice(&G,data)); scanf("%d",&data); } } else if(entrada=='c'){ verificaConexo(&G); } else if(entrada=='m'){ no *q; q=G.inicio; int maior=0, i, j; while(q!=NULL){ if(q->vertice>maior){ maior=q->vertice; } q=q->prox; } //gera a matriz int matriz[maior+1][maior+1]; //inicializa a matriz for(i=0;i<maior+1;i++){ for(j=0;j<maior+1;j++){ matriz[i][j]=0; } } q=G.inicio; while(q!=NULL){ matriz[q->vertice][0]=q->vertice; matriz[0][q->vertice]=q->vertice; q=q->prox; } // transforma o grafo em uma matriz aresta *p; i=0; j=0; q=G.inicio; while(q!=NULL){ p=q->prox_aresta; while(p!=NULL){ matriz[q->vertice][p->arestas]=p->custo; p=p->prox_aresta; } q=q->prox; } for(i=0;i<maior+1;i++){ for(j=0;j<maior+1;j++){ printf("|%d| ", matriz[i][j] ); } printf("\n"); } } //prim else if(entrada=='i'){ int distancia[buscamaior(&G)], pai[buscamaior(&G)], key[buscamaior(&G)]; no *q; q=G.inicio; algoritimo_prim(&G,distancia,pai,key); while(q!=NULL){ printf("%d --- %d\n",pai[q->vertice],key[q->vertice] ); q=q->prox; } } //djikistra else if(entrada =='d'){ int distancia[buscamaior(&G)], pai[buscamaior(&G)]; no *q; q=G.inicio; dijkstra(&G,q->vertice,distancia,pai); while(q!=NULL){ printf("%d ---- %d\n",distancia[q->vertice],pai[q->vertice] ); q=q->prox; } } printf("---------------------------------------------------------------------------\n"); //scanf(" %c",&entrada); } return 0; }
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; }