Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/05/2015, 14:24
jose_27
 
Fecha de Ingreso: febrero-2015
Mensajes: 20
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: circuito hamiltoniano

hola, ya cree mas o menos mi bactracking aqui esta pero tengo ciertas dudas ya que en una parte no se como desarrollarla y eso.

primero asi seria la entrada:

6 2 3

noria 12
mon_rusa 20
carritosCHO 100
silla_voladora 15
gusanito 1
casa_terror 13
0 1
2 1
0 2

y la salida es:

CarritosCho Mon_rusa
POSIBLE
Entrada CarritosCho Mon_rusa Entrada
Entrada Mon_rusa CarritosCho Entrada

entonces bueno me arroga un error y que por lo menos antes de hacer el backtracking, estaba entrando los datos y cuando llegue a las aristas ( h ) ya habia introducido 01 21 02 pero no hacia nada entonces llene y llene hasta que me leyo otras 3 coordenadas X y otras 3 Y mas las que ya habia hecho, me lee el doble,

bueno el asunto es que en el backtracking guarde en sol las j de la matriz de adyacencia ya que me indicaria los caminos pero creo que aparte me guarde el 0 del final que me permite ver si hay circuito o no, pero despues queria llamar a imrpimir para imrpimir los nombre que me mostrarian el circuito hamiltoniano pero ahi me tranque no supo como avanzar

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class atraccion {
  6.     private:
  7.     int x;
  8.     string name;
  9.     public:
  10.    
  11.     atraccion () {}
  12.     atraccion (int var, string nnombre){
  13.         x=var;
  14.         name = nnombre;
  15.     }
  16.     ~atraccion() {}
  17.    
  18.     void set_x (int val) {              //modifica el x
  19.         x = val;
  20.     }
  21.    
  22.     int get_x () {                      //devuelve el x
  23.         return x;
  24.     }
  25.    
  26.     void set_name ( string nom) {           //modifica el nombre
  27.         name =nom;
  28.     }
  29.    
  30.     string get_name () {                    //devuelve el nombre
  31.         return name;
  32.     }
  33. };
  34.  
  35. void imprimir (int path [], int arcos){
  36.     cout<<"Entrada"<<" ";                                 //aqui muestro los caminos para pasar por las atracciones que van de entrada hasta otra vez la entrada
  37.                                                                                      
  38. }
  39.  
  40. void back (int i, int j, bool array[10][10],int camino[],int acum=0 , int arist){
  41.    
  42.     if((j==0) && (acum= arist-1)){
  43.         cout<<"POSIBLE"<<endl;
  44.         imprimir (camino, arist);
  45.     }else{
  46.      if (array[i][j] == true ){
  47.         for (int x=0;x<10;x++){
  48.             int p=j;
  49.             camino[x]=j;
  50.             array[i][j] = array[j][i]=false;
  51.             acum=acum+1;
  52.             back (i=p, j=0, array, camino, acum, arist);
  53.            
  54.             camino[x] = ' ';                //desmarco y deshago mu solucion
  55.             acum= acum-1;               //desmarco y deshago mi solucion
  56.            
  57.         }
  58.                
  59.     }else{
  60.         back(i,j++,array,camino, acum,arist);           //busco otra solucion
  61. }
  62.         cout<< "IMPOSIBLE"<<endl;  
  63. }
  64. }
  65.  
  66. int main (){
  67.     int m, n, h,div;
  68.     int posmayor,mayor;
  69.     bool mat[10][10];
  70.     int x,y;
  71.     string nombre;
  72.     atraccion intercambio;
  73.     int r=0,s=0,t=0;
  74.    
  75.     cin>>m>>n>>h;
  76.    
  77.     int sol[h];
  78.     atraccion ar [m];       //arreglo que almacena cada atraccion
  79.    
  80.         for (int i=0;i<m;i++) {
  81.             cin>>nombre;
  82.             cin>>div;
  83.             ar[i].set_name(nombre);
  84.             ar[i].set_x (div);
  85.         }
  86.        
  87.         for( int g=0;g<10;g++){             //matriz de adyacencia
  88.             for (int f=0;f<10;f++){
  89.             mat[g][f] =false;
  90.         }
  91.         }
  92.        
  93.         for (int d=0;d<=h-1;d++){           //marca true
  94.             for (int e=0;e<=h-1;d++){
  95.                 cin>>x>>y;
  96.                 d=x;
  97.                 e=y;
  98.                 mat[d][e] =mat[e][d]= true;
  99.             }
  100.         }
  101.        
  102.         for (int w=0;w<=m-2;w++){               //ordenamiento //modelo 2
  103.             posmayor = w;
  104.             mayor = ar[w].get_x();
  105.             for (int k=w+1; k<=m-1; k++){
  106.                 /*if ((ar[k].get_x() == mayor) && (ar[k].get_name () < ar[w].get_name())){
  107.                     mayor= ar[k];
  108.                     posmayor=k;
  109.                 }else{*/
  110.                 if (ar[k].get_x() > mayor) {
  111.                     mayor = ar[k].get_x();
  112.                     posmayor =k;
  113.                     }
  114.                 //}
  115.             }
  116.            
  117.             intercambio = ar[posmayor];     //se encarga de cambiarlos
  118.             ar[posmayor] =ar[w];
  119.             ar[w] = intercambio;
  120.         }
  121.        
  122.         for (int j=0;j<n;j++) {             //imprime populares
  123.             cout<<ar[j].get_name()<<endl;
  124.         }
  125.        
  126.         for (int u=0;u<10;u++) {                //imprime booleana
  127.             for(int v=0;v<10;v++){
  128.             cout<<mat[u][v];
  129.         }
  130.     }
  131.         back(r, s, mat, sol, t , n);
  132.        
  133.     return 0;
  134. }

Última edición por jose_27; 22/05/2015 a las 15:41