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;
}
Example #3
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;
}
Example #5
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;
}
Example #6
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;
}