Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardo gomes araujo

Matriz - Distância

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.