コード例 #1
0
ファイル: 1790.c プロジェクト: ronaldpereira/paaeds3
int main()
{
	int vertices, arestas, origem, destino, x, y;
	int count = 0, aux = 0, valid = 0;
	TGraph Graph;

	while(scanf("%d %d", &vertices, &arestas) != EOF)
	{
		aux = 0;
		Graph.NVertices = vertices;
		Graph.NArestas = 0;

		CriaGraph(&Graph);

		for(x = 0; x < arestas; x++)
		{
			scanf("%d %d", &origem, &destino);
			origem--;
			destino--;

			InsereAresta(&origem, &destino, &Graph);
			Graph.NArestas+=2;
		}

		valid = Graph.NVertices;

		for(x = 0; x < Graph.NVertices; x++)
		{
			if(ListaAdjVazia(&x,&Graph))
				valid--;
		}

		for(x = 0; x < Graph.NVertices; x++)
		{
				for(y = 0; y < Graph.NVertices; y++)
				{
					if(Graph.Matrix[x][y] == 1)
					{
						count = 0;

						RetiraAresta(&x, &y, &Graph);
						DFS(&Graph, &count);

						if(count < valid)
							aux++;

						InsereAresta(&x, &y, &Graph);
					}
				}
		}
		fprintf(stdout, "%d\n", (aux/2));
	}
	return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: Bomfim/Projeto-Metro
int main(){
	FILE *fp;
	TipoGrafo* grafo;
	TipoVertice v1, v2;
	TipoPeso peso;
	int op, res, num;

	printf("1- Cria grafo.\n");
	printf("2- Insere Aresta.\n");
	printf("3- Existe Aresta.\n");
	printf("4- Retira Aresta\n");
	printf("5- Consulta Aresta\n");
	printf("6- Mostra Lista de Adjacentes.\n");
	printf("7- Mostra Grafo\n");
	printf("8- Libera Grafo\n");
	printf("9- Caminho mais curto.\n");
	printf("10- Insere Arestas Arquivo.\n");
	printf("11- Desativa Estação.\n");
	printf("12- Mostrar Estações Desativadas.\n");
	printf("13- Caminho mais barato.\n");
	printf("0- Sair.");

	do{
		printf("\nEscolha uma opcao:\n");
		scanf("%d",&op);

		switch(op){

			case 1:{

				printf("\nEscolha o numero de estações:\n");
				scanf("%d",&num);

				grafo = Cria_grafo(num);

				break;
			}

			case 2:{

				printf("\nPrimeira estação:\n");
				scanf("%d",&v1);

				printf("\nSegunda estação:\n");
				scanf("%d",&v2);

				printf("\nDistancia:\n");
				scanf("%f",&peso.distancia);

				printf("\nPreco:\n");
				scanf("%f",&peso.preco);

				res = InsereAresta(grafo, v1, v2, peso);

				if(res == 1){
					printf("\nAresta foi inserida.\n");
					GravaArestaArquivo(fp, v1, v2, peso);
				}
				else{
					if(res == 0)
						printf("\nAresta nao existe.\n");
					else
						printf("\nGrafo nao existe.\n");
				}

				break;
			}

			case 3:{

				printf("\nEscolha a primeira estação:\n");
				scanf("%d",&v1);

				printf("\nEscolha a segunda estação:\n");
				scanf("%d",&v2);

				res = ExisteAresta(grafo, v1, v2);

				if(res == 1)
					printf("\nAresta existe.\n");
				else{
					if(res == 0)
						printf("\nAresta nao existe.\n");
					else
						printf("\nGrafo nao existe.\n");
				}

				break;
			}

			case 4:{

				printf("\nEscolha a primeira estação:\n");
				scanf("%d",&v1);

				printf("\nEscolha a segunda estação:\n");
				scanf("%d",&v2);

				res = RetiraAresta(grafo, v1, v2);

				if(res == 1)
					printf("\nAresta foi retirada.\n");
				else{
					if(res == 0)
						printf("\nAresta nao existe.\n");
					else
						printf("\nGrafo nao existe.\n");
				}

				break;
			}

			case 5:{

				printf("\nEscolha a primeira estação:\n");
				scanf("%d",&v1);

				printf("\nEscolha a segunda estação:\n");
				scanf("%d",&v2);

				res = ConsultaAresta(grafo, v1, v2, &peso);

				if(res == 1)
					printf("O peso da aresta (%d,%d) = Distancia: %0.2f; Preco: %0.2f\n", v1, v2, peso.distancia, peso.preco);
				else{
					if(res == 0)
						printf("\nAresta nao existe.\n");
					else
						printf("\nGrafo nao existe.\n");
				}

				break;
			}

			case 6:{

				printf("\nEscolha a estação:\n");
				scanf("%d",&v1);

				MostraListaAdjacentes(grafo, v1);

				break;
			}

			case 7:{

				MostraGrafo(grafo);

				break;
			}

			case 8:{

				grafo = LiberaGrafo(grafo);

				break;
			}

			case 9:{

				printf("\nEscolha a estação de origem:\n");
				scanf("%d",&v1);

				printf("\nEscolha a estação de destino:\n");
				scanf("%d",&v2);

				Caminho_mais_Curto(grafo, v1, v2);

				break;
			}

			case 10:{

				if(InsereArestaArquivo(fp, grafo))
					printf("Arestas inseridas");

				break;
			}

			case 11:{

				printf("\nEscolha a estação:\n");
				scanf("%d",&v1);

				res = DesativaVertice(grafo, v1);

				if(res == 1)
					printf("Estação %d desativada\n", v1);
				else{
					if(res == 0)
						printf("\nEstação já estava desativada.\n");
					else
						printf("\nGrafo nao existe.\n");
				}

				break;
			}

			case 12:{
				VerticesDesativados(grafo);

				break;
			}

			case 13:{
				printf("\nEscolha a estação de origem:\n");
				scanf("%d",&v1);

				printf("\nEscolha a estação de destino:\n");
				scanf("%d",&v2);

				Caminho_mais_Barato(grafo, v1, v2);
			}

			default:
				;
		}
	}
	while(op != 0);

	return 0;
}