Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Programacion avanzada backtracking Error en ciclo

Estas en el tema de Programacion avanzada backtracking Error en ciclo en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/07/2010, 17:18
Avatar de 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

Etiquetas: programacion, ciclos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.