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