Publicidade

Entre para seguir isso  
Seguidores 0
ricardo gomes araujo

Matriz - Distância

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

[]s

0

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0