Académique Documents
Professionnel Documents
Culture Documents
Autores:
Cabrera Abanto, Jorge Fernando
Asesor:
Ing. López Martos Rosa Marleny
Cajamarca - Perú
2019
Problema del agente viajero:
Un agente viajero debe pasar por n ciudades diferentes. El objetivo es encontrar una
ruta que, comenzando y terminando en la misma ciudad, pase una sola vez por cada una
de las ciudades y minimice el costo del recorrido por el viajero. Se conocen los costos
entre cada una de las ciudades, de tal manera que se puede construir un grafo pesado
no dirigido en el que los vértices (o nodos) son las ciudades y el peso de las aristas es el
costo entre las ciudades.
Solución:
Una vez establecidos los costos en “cero” de la matriz de adyacencia [][] y la ciudad de
inicio (int ciudadactual = 0), el código compara en la matriz todos los costos de visitar
Ilustración 6. calcula_Costo: Suma del costo de las ciudades seleccionadas por busca_Mejorciudad.
El mejor nodo es aquel que tiene la arista de menor peso, siempre y cuando no haya
sido ya tomado en cuenta previamente en la trayectoria.
Codificación en C++:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <vector>
#define MAX_VALUE 1E10
#include <ctime>
using namespace std;
char caracter;
srand(time(NULL));
do{
cout<<"\n\nCantidad de ciudades: ";
int n;
cin>>n;
float Grafo[20][20];
int trayectoria[21] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
bool empleado[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
mostrar_Grafo(Grafo,n);
ciudadActual = 0;
for(int i=0;i<n;i++){
empleado[ciudadActual] = 1;
trayectoria[i] = ciudadActual;
siguienteCiudad =
busca_Mejorciudad(Grafo,n,ciudadActual,empleado);
ciudadActual = siguienteCiudad;
};
trayectoria[n] = 0;
cout<<"}"<<endl;
cout<<"\nEl menor costo del recorrido voraz es:
"<<calcula_Costo(Grafo,n,trayectoria)<<endl<<endl;
return 0;
}
for(int i=0;i<n;i++){
Grafo[i][i] = 0;
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
cout<<"Grafo["<<i<<", "<<j<<"] = ";
Grafo[i][j] = 3 + rand()% 20;
Sleep(300);cout<<Grafo[i][j]<<endl;
Grafo[j][i] = Grafo[i][j];
}
}
}
cout<<"\nGRAFO:";
float suma = 0;
int ciudadActual, ciudadSiguiente;
for(int i=0;i<n;i++){
ciudadActual = trayectoria[i];
ciudadSiguiente = trayectoria[i+1];
suma = suma + Grafo[ciudadActual][ciudadSiguiente];
}
return suma;