• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mylo

ajuda please

2 mensagens neste tópico

#include <stdio.h>
#define ASCII 65
#define INFINITO 9999999
int primeiraCidade();
int segundaCidade();
main() {
        
        int numCidades = 0;
        
        int i;
        int j;

        int visitados[numCidades];
  
  
        int cidadeActual;
  

        int cidadeMaisProxima;
  
  
        float distanciaMaisCurta;
  
  
        float distanciaTemp;
  
  
        int cidadeInicial = 0;

        
        printf("Introduza o numero de cidades: ");
        scanf("%d", &numCidades);
        
        float distancias[numCidades][numCidades];
        
        for (i = 0; i < numCidades - 1; i++) {
                for (j = i + 1; j < numCidades; j++) {
                        printf("Introduza a distancia entre a cidade %c e a cidade %c: ",
                                (char)(i+ASCII), (char)(j+ASCII));
                        scanf("%f",&distancias[i][j]);
                }
        }
  
        for (i = 0; i < numCidades; i++) {
                visitados[i] = 0;
        }
        
        cidadeActual = cidadeInicial;
  
  
        visitados[cidadeActual] = 1;
  
  
        printf("Começa na cidade %c\n", (char)(cidadeActual+ASCII));
       

        for (i = 0; i < numCidades; i++) {
    
    
                if (verificaVisitados(visitados,numCidades)){
                
                 distanciaMaisCurta = INFINITO;
     
    
                 for (j = 1; j < numCidades; j++) {
     
      
             if (visitados[j] != 1) {
        
                                 distanciaTemp ==distancias[primeiraCidade(cidadeActual, j)][segundaCidade(cidadeActual, j)];
         
                                 if (distanciaTemp < distanciaMaisCurta) {
           
           
           distanciaMaisCurta==distanciaTemp;
           
           
                                         cidadeMaisProxima==j;
                                 }
                         }
                 }
                 
                 printf("Vai da cidade %c para a cidade %c\n", (char)(cidadeActual+ASCII), (char)(cidadeMaisProxima+ASCII));
     
    
                 visitados[cidadeMaisProxima]= 1;
     
   
                 cidadeActual==cidadeMaisProxima;
                }
        }
        
        printf("Vai da cidade %c para a cidade %c\n", (char)(cidadeActual+ASCII), (char)(cidadeInicial+ASCII));
}

int primeiraCidade (int cidade1 , int cidade2) {
        if (cidade1 < cidade2)
                return cidade1;
        else
                return cidade2;
}

int segundaCidade (int cidade1, int cidade2) {
        if (cidade1 < cidade2)
                return cidade2;
        else
                return cidade1;
}

int verificaVisitados (int visitados[], int numCidades) {
        int i = 0;
        for ( i = 0 ; i < numCidades; i++) {
                if (visitados[i] == 0)
                        return 1;
        }
        return 0;
}

nao sei porque ao compilar e dpois de introduzir as distancias ou sai da janela onde introduzimos os dados ou entao cria um relatorio de erros...

obrigado desde ja pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O facto de sair da janela é porque não tens qualquer pausa no final do main. Eu prefiro correr os meus programas numa shell e podes ver o output do programa a vontade sem acrescentar instruções...

não testei o teu programa mas vi que tens aí erros nos calculos das distâncias: tás a usar "==" em vez de "=". verifica isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora