예제 #1
0
void LiberarMemoria(int *Pesos, int *Qualidade, TENSOR ***MATRIZ, TipoGrafo *Grafo, int MAXDist)
{
	int i,j;
	free(Pesos);
	free(Qualidade);
	for(i=0; i<=MAXDist; i++){
		for(j=0; j<NVertices; j++){
			free(MATRIZ[i][j]);
		}
		free(MATRIZ[i]);
	}
	free(MATRIZ);
	LiberaGrafo(Grafo);	
}
예제 #2
0
int main()
{
    int i, num_instancias = 0; // 0 < num_instancias <= 100

    fscanf(stdin, "%d", &num_instancias); // le da entrada padrao (stdin) a quantidade de instancias a serem resolvidas

    // processa o programa para cada instancia
    for (i = 0; i < num_instancias; i++)
    {
        TipoGrafo Grafo;                // declaracao de um novo grafo

        PreencheGrafo(&Grafo);          // inicializa e preenche o grafo com os valores da entrada padrao

        ProbabilidadeIncendio(&Grafo);  // funcao principal que calcula a prob de incendio para a instancia

        LiberaGrafo(&Grafo);            // libera a memoria alocada para o grafo

        if (i < num_instancias-1)
            fprintf(stdout, "\n");      // imprime uma quebra de linha ate antes de executar a ultima instancia
    }

    return 0;
}
예제 #3
0
파일: principal.c 프로젝트: gbsf/mc202
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 */
예제 #4
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;
}