Enviado em 20/12/2016 - 00:27h
Boa noite gente, eu estou com uma SUPER dúvida... Estou no primeiro período do curso de CC, iniciante em C e ainda não aprendi nada de grafos, árvore binária e etc... mas minha professora passou um TP pra gente que eu já passei dias tentando entender e fazer mas não consegui... Ele consiste em:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define inf
int nos;
int** add(){ //funcao adiciona recebe a matriz custo do usuario
int origem, destino;
do{
printf("Digite a quantidade de nós do grafo (min. 2): ");
scanf("%d", &nos);
}while(nos < 2);
//printf("%d", nos);
int **custo; //matriz custo de "nos" índices
custo = (int **) malloc(nos*sizeof(int));
for (int i = 0; i < nos; i++){
custo[i] = (int *) malloc(nos* sizeof(int));
}
for (int i = 0; i < nos; i++){ //zerando a matriz
for (int j = 0; j < nos; j++){
custo[i][j] = 0;
}
}
for (int i = 0; i < nos; i++){ //imprimindo so pra ver se deu certo
for (int j = 0; j < nos; j++){ //NAO vai entrar no programa final
printf("%2d ", custo[i][j]);
}
printf("\n");
}
getchar();
getchar();
printf("Entre com as Arestas:\n"); //a partir daqui vai ler a origem, destino e peso
do {
do {
printf("Origem da aresta (entre 1 e %d ou '0' para sair): ", nos);
scanf("%d",&origem);
}while (origem < 0 || origem > nos);
if (origem) {
do {
printf("Destino da aresta (entre 1 e %d, menos %d): ", nos, origem);
scanf("%d", &destino);
}while (destino < 1 || destino > nos || destino == origem);
do {
printf("Custo (positivo) da aresta do vertice %d para o vertice %d: ", origem, destino);
scanf("%d",&custo[origem-1][destino-1]);
custo[destino-1][origem-1] = custo[origem-1][destino-1];
}while (custo[origem-1][destino-1] < 0);
}
}while (origem);
return custo;
}
void imprime(int **custo){
for (int i = 0; i < nos; i++){ //ímprimindo matriz custo(NAO ENTRA NO PROG FINAL)
for (int j = 0; j < nos; j++){
printf("%2d ", custo[i][j]);
}
printf("\n");
}
getchar();
getchar();
}
void procura(int **custo){
int vet[nos], inicio, fim;
do{
printf("Digite o vertice de inicio e de fim desejados(entre 1 e %d): ", nos);
scanf("%d %d", &inicio, &fim);
}while(inicio < 1 || inicio > nos || fim < 1 || fim > nos || inicio == fim);
for (int i = 0; i < nos; i++)
vet[i] = 0;
}
int main (){
int op;
int **custo;
do{
system("clear");
printf("+----------NUMERO UM DO TP DE MD----------+\n"
"0 - para sair\n1 - Inserir matriz custo\n2 - Inserir início e fim "
"do grafo para calcular a maior distancia entre eles\n3 - Imprime matriz custo\nDigite a opcao: ");
scanf("%d", &op);
switch (op){
case 1:
custo = add(); //aqui tá dando erro de segmentaçao
break;
case 2:
procura(custo);
break;
case 3:
imprime(custo);
break;
case 0:
break;
default:
printf("Opcao invalida, pressione Enter para voltar ao menu... ");
setbuf(stdin,NULL);
getchar();
break;
}
}while (op != 0);
return 0;
}
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
O macete do Warsaw no Linux Mint e cia
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Sem espaço na partição home (2)
O que você está ouvindo agora? [2] (190)
Procrastinação e autossabotagem são problemas muito comuns na sociedad... (5)