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

Recursive backtracking, problema en c

Estas en el tema de Recursive backtracking, problema en c en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/05/2012, 03:26
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 12 años
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);

Etiquetas: funcion, int, programa, recursive
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 18:37.