Por favor, cuando copiéis código de un blog, quitarle por lo menos el copyright o el autor quedará mal si lo habéis modificado... para intentarlo hacer no simétrico.
Saludos, comunidad informática.
Código
/* SOLUCIÓN OPTIMA VIAJANTE DE COMERCIO SIMÉTRICO */ #include <stdio.h> #include <stdlib.h> #define N 8 // Numero de ciudades #define MIN 1 // Distancia minima #define MAX 9 // Distancia maxima #define CIUDAD_ORIGEN 0 // Ciudad origen = A #define SEMILLA 1024 // Semilla para repetir el experimento #define TRUE (1 == 1) #define FALSE (1 != 1) char ciudades[18] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'}; int d[N][N]; // 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 matriz_distancias (void) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j) { d[i][j] = 0; } else { d[j][i] = d[i][j]; } } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { } } } 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; for (int i = 0; i < N; i++) { } } } 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) { matriz_distancias(); for (int i = 0; i < N; i++) { visitadas[i] = FALSE; } busqueda_profundidad (1, CIUDAD_ORIGEN, suma, visitadas); return 0; }
MOD: No hacer doble post. Usar el botón modificar.