elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema del viajante
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema del viajante  (Leído 3,834 veces)
deifk

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Problema del viajante
« en: 8 Noviembre 2011, 16:04 pm »

Hola! por primera vez escribo en este foro para pedir ayuda sobre un programa que han mandado en clase, el problema del viajante. Para hacerlo solo dispongo de las herramientas, if-else y switch, ya que no hemos dado mas haya este año, se me ocurre formas de hacer el programa con el for y un vector, pero eso no lo puedo utilizar, asi que haber si me podeis ayudar y decirme el porque mi programa no se ejecuta correctamente.
El problema que se plantea es el siguiente, dispongo de un punto inicial, y digamos otros 3 posibles puntos, con sus respectivas coordenadas, los cuales son introducidos por el usuario. Pues bien el objetivo es que el programa saque por pantalla, el recorrido minimo (en distancia) y el numero de recorrido, para ello utilizo las variables x e y, las cuales las inicializo y supongo que la distancia t123 es la minima.

/*Problema del viajante, calculo de la distancia minima*/

#include <stdio.h>
#include <math.h>

main()
 
{
 float x1,y1,x2,y2,x3,y3,d01,d02,d03,d12,d13,d23,d10,d20,d30,d21,d31,d32,t123,t132,t213,t231,t312,t321,x,y;
 
 printf("Introduzca las coordenadas del punto 1: ");
 scanf("%f%f", &x1, &y1);
 printf("Introduzca las coordenadas del punto 2: ");
 scanf("%f%f", &x2, &y2);
 printf("Introduzca las coordenadas del punto 3: ");
 scanf("%f%f", &x3, &y3);
 
 d01=d10=sqrt(x1*x1+y1*y1);
 d02=d20=sqrt(x2*x2+y2*y2);
 d03=d30=sqrt(x3*x3+y3*y3);
 d12=d21=sqrt((pow((x2-x1),2))+(pow((y2-y1),2)));
 d13=d31=sqrt((pow((x3-x1),2))+(pow((y3-y1),2)));
 d23=d32=sqrt((pow((x3-x2),2))+(pow((y3-y2),2)));
 
 t123=d01+d12+d23+d30;
 t132=d01+d13+d32+d20;
 t213=d02+d21+d13+d30;
 t231=d02+d23+d31+d10;
 t312=d03+d31+d12+d20;
 t321=d03+d32+d21+d10;

 x=t123;
 y=123;
 
 if(t213<t123 && t213<t132 && t213<t231 && t213<t312 && t213<t321)
   {
    x=t213;
    y=213;
   }
 else if(t132<t123 && t132<t213 && t132<t231 && t132<t312 && t132<t321)
   {
    x=t132;
    y=132;
   }
 else if(t231<t123 && t231<t132 && t231<t213 && t231<t312 && t231<t321)
   {
    x=t231;
    y=231;
   }
 else if(t312<t123 && t312<t132 && t312<t213 && t312<t231 && t312<t321)
   {
    x=t312;
    y=312;
   }
 else if(t321<t123 && t321<t132 && t321<t213 && t321<t231 && t321<t312)
   {
    x=t321;
    y=321;
   }       
           
printf("El identificador de recorrido minimo es 0-%3.0f-0 y la distancia minima %0.4f\n", y,x);
}


En línea

adastra
Endless Learner
Ex-Staff
*
Desconectado Desconectado

Mensajes: 885


http://thehackerway.com/


Ver Perfil WWW
Re: Problema del viajante
« Respuesta #1 en: 8 Noviembre 2011, 16:14 pm »

Es normal que tu código se vea desordenado y utilices demasiadas variables (estas aprendiendo) pero para hacer lo que te han pedido sin usar ciclos "for" o otras instrucciones de repetición, debes usar RECURSIVIDAD de funciones, por ejemplo:


void funcion1(int valor) {
  if(valor == 10) {
     return;
  } else {
     valor = valor+1;
     funcion1(valor);
  }
}

El comportamiento anterior es exactamente igual a un ciclo for del 1 al 10. es algo que se usa con frecuencia entre programadores de c/c++/java y suele ser una estupenda forma de realizar tareas con un nivel de complejidad medio/alto.
Lee más sobre este tema y seguramente podras resolver tu problema mucho más facilmente.


En línea

deifk

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Problema del viajante
« Respuesta #2 en: 8 Noviembre 2011, 16:31 pm »

Algo de lo que me comentas me suena de haberlo dado hace un par de años, pero creo que no puedo utilizarlo, aun no hemos dado llamadas a funciones nose si eso podre ponerlo, de todas formas leere sobre el tema gracias por contestar tan rapido, si alguien tiene una solucion simple al problema solo con las herramientas que he expuesto y me puede dar alguna pista mas se lo agradeceria.
un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,238 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
Problema viajante de comercio dinamico
Java
josnick 0 3,004 Último mensaje 31 Mayo 2014, 01:23 am
por josnick
Viajante comercio
Programación C/C++
Dato Vagabundo 6 8,889 Último mensaje 16 Octubre 2022, 22:00 pm
por jca1
Problema viajante de comercio (TSP)
Programación General
jca1 2 2,818 Último mensaje 19 Febrero 2021, 17:15 pm
por jca1
Problema del viajante de comercio - Branch and Bound « 1 2 3 4 »
Programación General
jca1 30 24,093 Último mensaje 24 Mayo 2022, 18:37 pm
por jca1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines