Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/07/2010, 17:18
Avatar de extremoo
extremoo
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 0
Programacion avanzada backtracking Error en ciclo

Hola buen dia, les comento estoy haciendo un programa con backtracking donde se me pasa las dimensiones de una matriz por teclado y luego ingreso de igual manera los datos por teclado me explico

3 3
...
.*I
...

el programa tiene que arrojarme cada vez que encuentre una I en la matriz un parentesis asi ( y si alrededor de la i hay un * un parentesis para el otro lado ejemplo salida.
...
.)(
...

pero tengo un problema la salida se me repite muchas veces creo tener algo mal en el un ciclo la idea es que salga una sola vez Ayuda plis!! les dejo el codigo

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void mostrar(char **t, int r,int c)
  6. {
  7.     for(int i=0 ; i< r; i++)
  8.     {
  9.      for(int j= 0; j < c ; j++)
  10.      {
  11.       cout<<t[i][j];
  12.      }
  13.      cout<<endl;
  14.     }
  15. }
  16.  
  17. void llenar(char **s,int x, int y)
  18. {
  19.     s[0][0] = x +1;
  20.     s[0][1] = y;
  21.  
  22.     s[1][0] = x -1;
  23.     s[1][1] = y;
  24.  
  25.     s[2][0] = x;
  26.     s[2][1] = y +1;
  27.  
  28.     s[3][0] = x;
  29.     s[3][1] = y -1;  
  30.  
  31.     s[4][0] = x+1;
  32.     s[4][1] = y-1;
  33.  
  34.     s[5][0] = x-1;
  35.     s[5][0] = y+1;
  36. }
  37.  
  38. void relojero(char **t,int r, int c, int p, int x, int y)
  39. {
  40. int i,j;
  41. char q;
  42.     //encontrar Ies
  43.     i=0;
  44.     if(p==0){
  45.      while(i<r){
  46.       j=0;
  47.      while(j<c){
  48. // comilla simple para igualar puntero
  49.       if(t[i][j]=='I'){
  50.       relojero(t,r,c,p+1,i,j);
  51.        }
  52.       j++;        
  53.      }
  54.       i++;
  55.      }
  56.     }
  57.     else {
  58.      //condicion de termino, que no hayan mas movimientos
  59.         if(p==r*c+1)
  60.         {
  61.         mostrar(t,r,c);        
  62.         }else  
  63.         {
  64.         char **s;
  65.         s = new char*[6];
  66.         for(int i = 0; i<6;i++)
  67.         {
  68.             s[i] = new char[6];
  69.         }
  70.         llenar(s,x,y);
  71.         for(int i = 0; i < 6; i++)
  72.         {
  73.          int nx = s[i][0];
  74.          int ny = s[i][1];
  75.          if( (nx >= 0 && nx <c) && ( ny >=0 && ny <r) )
  76.          {
  77.  
  78.              if(t[nx][ny]=='I')
  79.              {
  80.                  t[nx][ny] = '(';
  81.                  relojero(t,r,c,p+1,nx,ny);
  82.                  t[nx][ny] = 'I';
  83.              }
  84.              else if (t[nx][ny]=='*')
  85.              {
  86.                  t[nx][ny] = ')';
  87.                  relojero(t,r,c,p+1,nx,ny);
  88.                  t[nx][ny] = '*';
  89.              }
  90.              else if (t[nx][ny]=='.')
  91.              {
  92.                  t[nx][ny] = '-';
  93.                  relojero(t,r,c,p+1,nx,ny);
  94.                  t[nx][ny] = '.';
  95.              }
  96.          }
  97.  
  98.         }
  99.     for(int i = 0; i< r; i++)
  100.     {
  101.      delete [] s[i];
  102.     }
  103.     delete [] s;
  104.        
  105.     }
  106. }
  107. }
  108.  
  109.  
  110. int main(int argc, char *argv[])
  111. {
  112.     int R, C;
  113.     cin>>R;
  114.     cin>>C;
  115. int i,j;
  116.  
  117. while(R != 0 && C != 0)
  118.   {//crear matriz general
  119.   char **m;
  120.   m = new char*[R];
  121.   i=0;
  122.     while(i<R)
  123.     {
  124.     m[i] = new char[C];
  125.     i++;
  126.     }//crear matriz de engranes principales
  127.  char *e;//asigno valores
  128.  i=0;
  129.  while(R!=i)
  130.    {
  131.    j=0;
  132.      while(C!=j)
  133.      {
  134.      cin >> m[i][j];
  135.      j++;            
  136.      }
  137.    i++;
  138.    }
  139.    relojero(m,R,C,0,-1,-1);
  140.    cin>>R;
  141.    cin>>C;
  142.    
  143.    for(int i = 0; i< R; i++)
  144.     {
  145.      delete [] m[i];
  146.     }
  147.     delete [] m;
  148. }    
  149.     return 0;
  150. }

Última edición por extremoo; 04/07/2010 a las 17:25