He encontrado este codigo por internet pero no se porque no me hace bien los caminos,
soy principiante no me juzgueis

#include <stdio.h>
#include <stdlib.h>
#define N 4 // Numero de ciudades
#define CIUDAD_ORIGEN 0
#define TRUE (1 == 1)
#define FALSE (1 != 1)
char ciudades[4] = {'0', '1', '2', '3'};
int d[4][4]={{0,20,40,60},
{30,0,50,25},
{20,25,0,50,},
{20,30,0,0}}; // Matriz de distancias
int visitadas[N]; // Ciudades visitadas por el algoritmo
int suma = 0; // Suma de costes
int optima = 999999; // Solucion optima inicial
int iteraciones = 0; // Numero de iteraciones
int solucion[N]; // Vector con el trayecto realizado
void busqueda_profundidad (int nivel, int origen, int suma, int visitadas[]) {
visitadas[origen] = TRUE;
solucion[nivel - 1] = origen;
iteraciones++;
for (int destino = 0; destino < N; destino++) {
if (visitadas[destino] == FALSE) {
suma = suma + d[origen][destino];
if (suma < optima) {
busqueda_profundidad(nivel + 1, destino, suma, visitadas);
}
if (nivel == (N - 1)) {
suma = suma + d[destino][CIUDAD_ORIGEN];
if (suma < optima) {
optima = suma;
printf ("Estableciendo nueva solucion optima, coste = %6d\n", optima
); for (int i = 0; i < N; i++) {
printf (" %c, ", ciudades
[ solucion
[i
] ]); }
printf (" %c }\n\n", ciudades
[CIUDAD_ORIGEN
]); }
} else {
suma = suma - d[origen][destino];
}
visitadas[destino] = FALSE;
}
}
}
int factorial (int n) {
int f = 1;
for (int i = n; i > 1; i--) {
f = f * i;
}
return f;
}
int main (void) {
printf ("RESOLUCION DEL PROBLEMA DEL VIAJANTE DE COMERCIO\n"); printf ("(c) Alejandro Portero Gimeno 2015\n\n");
//matriz_distancias();
for (int i = 0; i < N; i++) {
visitadas[i] = FALSE;
}
printf ("\nNum. ciudades = %d\n\n", N
);
busqueda_profundidad (1, CIUDAD_ORIGEN, suma, visitadas);
printf ("Iteraciones = %12d\n", iteraciones
); printf ("Soluciones totales = %12d\n", factorial
(N
)); printf ("Soluciones descartadas = %12d\n", factorial
(N
) - iteraciones
);
return 0;
}
MOD EDIT: Etiquqtas GeSHi (por 2da vez).