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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Impressora Bematech MP4200TH rorando com a distribuição Zorin OS (0)
como fazer overclock na ram? (7)
Existe algum problema de atualizar uma versão lts para uma versão não ... (3)