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;
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Debian 12 (net inst) instalado Pendrive erro ao inicializar (3)
Agora temos uma assistente virtual no fórum!!! (246)