Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/11/2013, 13:50
nandaarea
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta Problema del agente viajero

Hola se supone que tengo que hacer el programa que muestre el costo minimo y la ruta la cual debe de tomar . El programa que hice pide el tamaño de un arreglo que seria las ciudades a las que debe ir el agente, despues es pide los costos del trayecto; el profesor nos puso un ejemplo en el cual me estoy basando para hacer el programa el ejemplo es el siguiente:

tabla de costos:
| 999,10,15,20 |
| 5,999,9,10 |
| 6,13,999,12 |
| 8 ,8,9,999|

Costo minimo 35
Trayecto 1a2, 2a4, 4a3, 3a1

El programa Calcula el costo minimo pero no se como hacer que la funcion tps muestre el trayecto o tendría que crear otra funcion que haga el trayecto la verdad no tengo idea de como hacer que el programa haga eso en eso necesito su ayuda.

El 999 es que noo existe una ruta .

Aqui el codigo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int tsp(int **c, int *g, int ini, int n);
  4. main (){
  5.      int t,i,j,**c,*g,cost;
  6.      printf("ingrese el tamaño del arreglo: ");
  7.      scanf("%d",&t);
  8.      c=(int**)calloc(t+1,sizeof(int*));
  9.      for(i=0;i<t;i++){
  10.          c[i]=(int*)calloc(t+1,sizeof(int));
  11.          }
  12.      for(i=0;i<t;i++){
  13.          for(j=0;j<t;j++){
  14.              printf("ingrese los valores [%d][%d]: ",i+1,j+1);
  15.              scanf("%d",&c[i][j]);
  16.              }        
  17.          }
  18.      g=(int*)calloc(t+1,sizeof(int));
  19.      for(i=0;i<t;i++)
  20.      g[i]=i;
  21.      cost=tsp(c,g,0,t);
  22.      printf("costo minimo: %d",cost);
  23.      getchar();
  24.      getchar();
  25. }
  26. int tsp(int **c, int *g, int ini, int n){
  27.     int i, j, k,*temp,*ming, mincost, ccost;
  28.     if(ini==n-2)
  29.     return c[g[n-2]][g[n-1]]+c[g[n-1]][0];
  30.     mincost=999;  
  31.     temp=(int*)calloc(n+1,sizeof(int));
  32.     for(i=ini+1;i<n;i++){
  33.         for(j=0;j<n;j++)
  34.              temp[j]=g[j];
  35.             temp[ini+1]=g[i];
  36.             temp[i]=g[ini+1];
  37.             if(c[g[ini]][g[i]]+(ccost=tsp(c,temp,ini+1,n))<mincost){
  38.                mincost=c[g[ini]][g[i]]+ccost;
  39.                ming=(int*)calloc(n+1,sizeof(int));
  40.                for(k=0;k<n;k++)
  41.                ming[k]=temp[k];
  42.                }
  43.     }
  44.     return mincost;
  45. }

Espero puedan ayudarme