Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

Matriz - Distância

  • Por favor, faça o login para responder
2 respostas neste tópico

#1 ricardo gomes araujo

ricardo gomes araujo
  • Membros
  • 36 posts

Postado 26 fevereiro 2011 - 01:15

A distância entre várias cidades é dada pela tabela abaixo (em km):
1 2 3 4 5
1 00 15 30 05 12
2 15 00 10 17 28
3 30 10 00 03 11
4 05 17 03 00 80
5 12 28 11 80 00

Construa um programa que leia a tabela acima e informe ao usuário a distância entre duas cidades por ele requisitadas, até que ele entre com o código 0 para ambas as cidades;

Dado um determinado percurso, imprima o total percorrido:

Exemplo: dado o percurso 1, 2, 3, 2, 5, 1, 4, teremos:
15 + 10 + 10 + 28 + 12 + 5 = 80 km.

Segue o que consegui fazer:

#include <stdio.h>
#include <stdlib.h>

int main( )
{
    //declaração da matriz de distâncias
    int matD[5][5] = {{0,15,30,05,12},
                     {15,0,10,17,28},
                     {30,10,0,3,11},
                     {5,17,3,0,80},
                     {12,28,11,80,0}};
   int i,j;
   int p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
   int achei;
   int dt;
   
   do {
    /*Entrar com a localização da distância escolhida*/
    printf("Entre com a posicao da linha da distancia desejada: ");
    scanf("%d",&p1);
    printf("Entre com a posicao da coluna da distancia desejada: ");
    scanf("%d",&p2);
    printf("Entre com a posicao 3: ");
    scanf("%d",&p3);
    printf("Entre com a posicao 4: ");
    scanf("%d",&p4);
     printf("Entre com a posicao 5: ");
    scanf("%d",&p5);
     printf("Entre com a posicao 6: ");
    scanf("%d",&p6);
     printf("Entre com a posicao 7: ");
    scanf("%d",&p7);
     printf("Entre com a posicao 8: ");
    scanf("%d",&p8);
    printf("Entre com a posicao 9: ");
    scanf("%d",&p9);
    printf("Entre com a posicao 10: ");
    scanf("%d",&p10);
    
        /*laço de repetição para percorrer a matriz*/
        for (i=0; i<5; i++)
          for(j=0; j<5; j++)
          {
                if (p1 == i)
                achei = matD[i][j];
                  if (p2 == i)
                  achei = matD[i][j];
                    if (p1==j)
                    achei = matD[i][j];
                      if (p1==j)
                      achei = matD[i][j];
         }      
    
    
    dt = p1 + p2 + p3 + p6 + p8;                        
  
          //mostrar a matriz
          for (i=0; i<5; i++)
            {
             for (j=0; j<5; j++)
              {
              printf("%d\t", matD[i][j]);
              }
               printf("\n");
            }
               printf("\n\n\n");
} while (p1==0 && p2==0);

//mostrar o resultado com o que o programa pede
printf("A distancia entre as cidades requisitadas eh %d",achei);
printf("A distancia total entre os pontos informados eh %d",achei);

              getch();
              return 0;
}


Não sei como achar a distância escolhida pelo usuário.
E também estou com dificuldade em achar a distância total para um determinado percurso
  • 0

#2 quitZAUMMM

quitZAUMMM

    YES, WE CAN

  • Moderadores
  • 3.923 posts

Postado 02 março 2011 - 11:51

Dê uma lida sobre grafos, isso irá te ajudar.

[]s
  • 0

#3 Rafael B..

Rafael B..
  • Membros
  • 3 posts

Postado 08 março 2011 - 13:31

bem...
Eu não intendi direito porque no exemplo você usou 7 cidades e no seu código 10 cidades.
Para resolver isso coloquei, no meu código, o número de cidade que o indivíduo vai passar.

O seu código está pesado. Tem for dentro de for deixando ele complexo e ineficaz, tente buscar soluções mais simples.
Não analisei o seu código muito bem devido a complexibilidade mas um possivel erro é que o primeiro elemento da matriz nao é o matD[1][1] e sim o matD[0][0].

Estou mandando meu código, qualquer dúvida pergunte.

#include <stdio.h>
#include <stdlib.h>

int main( )
{
    int matD[5][5] = {{0,15,30,5,12},
                     {15,0,10,17,28},
                     {30,10,0,3,11},
                     {5,17,3,0,80},
                     {12,28,11,80,0}};
   int n,resp = 0,i,j;
   printf("Digite o numero de cidades percorridas\n");
   scanf("%d", &n);
   system("cls");
   int p[n];
   for(i=0;i<n;i++)
   {
                   printf("Digite a %d cidade\n", i+1);
                   scanf("%d", &p[i]);
                   system("cls");
   }
   for(j=0;j<n-1;j++)
   {
                   resp += matD[p[j]-1][p[j+1]-1];
   }
   

printf("A distancia entre as cidades requisitadas eh %d\n",resp);
printf("A distancia total entre os pontos informados eh %d\n",resp);
system("pause");
              return 0;
}

  • 0




Publicidade

/ins>