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;
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Instalar Linux e grub em hd ssd externo [RESOLVIDO] (5)
Software livre - será que eu estou tão errado assim? (14)