Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/05/2012, 03:26
fxmarquez
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 12 años, 11 meses
Puntos: 0
Recursive backtracking, problema en c

Hola , me gustaria que me ayudaseis con un programa que tengo hecho, basicamente es un solucionador(sencillo) de laberintos, que funciona perfectamente, mientras haya un solo camino que llegue a la meta y no haya bifurcaciones que lleven a caminos cerrados..Aqui esta el algoritmo que uso, mediante recursividad, lo unico que me hace falta es usar lo que he visto en internet "backtracking", para regresar a una casilla donde pueda irse para otro camino...cosa en la que estoy bastante perdido. Muchisimas gracias de antemano
Código:
//MARCA = '*'El laberinto esta formado por espacios(32) y #, la meta es @(64)
 i=x1;
     j=y1;
     listo=FALSE;
    do
     {
     if(i==x2 && j==y2) listo=TRUE;
     if(i!=x2 && j!=y2) lab[i][j]=MARCA;
     if(listo==FALSE &&(lab[i][j+1]==32||lab[i][j+1]==64)) //Mov a derecha
     {
               j=j+1;
     if(i==x2 && j==y2) listo=TRUE;
     else
     {
         lab[i][j]=MARCA;   
     }
     
     }
     if(listo==FALSE &&(lab[i+1][j]==32||lab[i+1][j]==64)) //Mov a abajo
     {
               i=i+1;  
     if(i==x2 && j==y2) listo=TRUE;                                                       
      else
      {
         lab[i][j]=MARCA;   
      }
     }
     
      if(listo==FALSE &&(lab[i][j-1]==32||lab[i][j-1]==64)) //Mov izquierda
     {
               j=j-1;  
     if(i==x2 && j==y2) listo=TRUE;
      
     else
     {
         lab[i][j]=MARCA;   
     }
     
     }

      if(listo==FALSE &&(lab[i-1][j]==32||lab[i-1][j]==64)) //Mov arriba
     {
               i=i-1;
     
     if(i==x2 && j==y2) listo=TRUE;
        
     else
     {
         lab[i][j]=MARCA;//marco la posicion con *   
     }
     
     }
     
     }while(listo!=TRUE);