Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/05/2015, 18:47
jose_27
 
Fecha de Ingreso: febrero-2015
Mensajes: 20
Antigüedad: 9 años, 2 meses
Puntos: 0
circuito hamiltoniano

hola, mi proyecto trata sobre un parque de atracciones en las cuales se almacenan en un arreglo por nivel de diversion entre mas novel de diversion tengan iran primero , bueno cree mi matriz de bool que pondra todo en falso , despues creo otros dos for que iran hasta h-1 ya que h es la cantidad de aristas o caminos que se conectaran con cada atraccion (que solo puede ser recorrida una sola vez ) entonces dentro de esos for pongo que lea las coordenadas X y Y, y y entonces mi matriz [i][j] =matriz[j][i] = true , pero no se como hacer para validar los caminos, osea supongan que tengo esto:

0 1
2 1
0 2

entonces como son simetricas las coordenadas entonces hay dos circuitos 0120 y 0210 pero no se como hago o que funcion hacer para que halle la transitividad y vea si hay circuito hamiltoniano
por favor podrian ayudarme con eso

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.  
  36.  
  37. int main (){
  38.     int m, n, h,div;
  39.     int posmayor,mayor;
  40.     bool mat[10][10];
  41.     int x,y;
  42.     string nombre;
  43.     atraccion intercambio;
  44.    
  45.     cin>>m>>n>>h;
  46.    
  47.     atraccion ar [m];       //arreglo que almacena cada atraccion
  48.    
  49.         for (int i=0;i<m;i++) {
  50.             cin>>nombre;
  51.             cin>>div;
  52.             ar[i].set_name(nombre);
  53.             ar[i].set_x (div);
  54.         }
  55.        
  56.         for( int g=0;g<10;g++){             //matriz de adyacencia
  57.             for (int f=0;f<10;f++){
  58.             mat[g][f] =false;
  59.         }
  60.         }
  61.        
  62.         for (int d=0;d<=h-1;d++){           //marca true
  63.             for (int e=0;e<=h-1;d++){
  64.                 cin>>x>>y;
  65.                 d=x;
  66.                 e=y;
  67.                 mat[d][e] =mat[e][d]= true;
  68.             }
  69.         }
  70.        
  71.         for (int w=0;w<=m-2;w++){               //ordenamiento //modelo 2
  72.             posmayor = w;
  73.             mayor = ar[w].get_x();
  74.             for (int k=w+1; k<=m-1; k++){
  75.                 if ((ar[k].get_x() == mayor) && (ar[k].get_name () < ar[w].get_name())){
  76.                     mayor= ar[k];
  77.                     posmayor=k;
  78.                 }else{
  79.                 if (ar[k].get_x() > mayor) {
  80.                     mayor = ar[k].get_x();
  81.                     posmayor =k;
  82.                     }
  83.                 }
  84.             }
  85.            
  86.             intercambio = ar[posmayor];     //se encarga de cambiarlos
  87.             ar[posmayor] =ar[w];
  88.             ar[w] = intercambio;
  89.         }
  90.        
  91.         for (int j=0;j<n;j++) {
  92.             cout<<ar[j].get_name()<<endl;
  93.         }
  94.        
  95.        
  96.     return 0;
  97. }