Ver Mensaje Individual
  #34 (permalink)  
Antiguo 02/04/2007, 16:46
Avatar de nicolaspar
nicolaspar
 
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años, 1 mes
Puntos: 34
Re: Soluciones para el Desafío del Laberinto

shakaran, realmente me gustaría ayudarte, pero es extenso el meterse en lo que estas haciendo, necesitaría bajarme el script e ir viéndolo...igual estoy seguro que estas cerca!


Me tomo 5 min para dejarles los comentarios de mi script. Realmente son dos funciones, una llamada validarPosicion, y la otra llamada recorrerLaberinto. Después esta la función queso que fue otorgada en el desafió, y la función dibujarLaberinto que no tiene mucho que explicar, simplemente recorre el array y mete una imagen por cada posición.


Código


Código PHP:
<?

/*
validarPosicion:
    Datos de entrada:
        $fila Int
        $columna Int
    Datos de salida:
        Boolean
*/
function validarPosicion$fila$columna ){
    
#Declaro globales variables
    
global $laberinto$filas$columnas$pared$libre$visitada;
    
#Me fijo si las posiciones están dentro del array
    
if( $fila || $fila >= $filas || $columna || $columna >= $columnas ) return false;
    
#Ahora veo si las posiciones han sido visitadas o si es pared
    
if( $laberinto[$fila][$columna] == $visitada || $laberinto[$fila][$columna] == $pared ) return false;
    
#Si no se hizo un return false llegará acá y dará true
    
return true;
}

/*
recorrerLaberinto:
    Datos de entrada:
        $fila Int
        $columna Int
    Datos de salida:
        Boolean
*/

function recorrerLaberinto$fila$columna ){
    
#Declaro globales variables
    
global $laberinto$filas$columnas$pared$libre$queso$visitada$encontroQueso;
    
#Veo que la posición que estoy viendo no sea $queso, de ser así pongo $encontroQueso en true, lo cual cortará la recursividad, y marcaré dicha posición como $queso.
    
if( $laberinto[$fila][$columna] == $queso ){
        
$encontroQueso true;
        
$laberinto[$fila][$columna] = $queso;
    }else{
    
#Sino, simplemente la marco como que ya ha sido visitada
        
$laberinto[$fila][$columna] = $visitada;
    }
    
#Ahora, lo que haré es ver que $encontroQueso sea false, y que la posición que recorreré (abajo, derecha, izquierda, arriba) sea valida mediante validarPosicion.
    #Si es una posición que puedo recorrer hago recursividad, sino pasará a ver si puede recorrer en la siguiente posición. En caso de pasar los 4 if, dará true como salida y cortara el script.
    
if( $encontroQueso === false && validarPosicion( ( $fila ), $columna ) === true $encontroQueso recorrerLaberinto( ( $fila ), $columna ); #Abajo
    
if( $encontroQueso === false && validarPosicion$fila, ( $columna ) ) === true $encontroQueso recorrerLaberinto$fila, ( $columna ) ); #Derecha
    
if( $encontroQueso === false && validarPosicion$fila, ( $columna ) ) === true $encontroQueso recorrerLaberinto$fila, ( $columna ) ); #Izquierda
    
if( $encontroQueso === false && validarPosicion( ( $fila ), $columna ) === true $encontroQueso recorrerLaberinto( ( $fila ), $columna ); #Arriba
    
return $encontroQueso;
}


#Ejecución:

#Un titulo
echo "<h1>Original</h1>";
#Pongo el queso
queso$laberinto );
#Dibujo el laberinto original
dibujarLaberinto();
#Ejecuto recorrerLaberinto en una posición fija y veo que me de true, en caso contrario no habrá encontrado solución
$ok recorrerLaberinto1);
#Y por no encontrarla corto y muestro un mensaje
if( $ok === false ) die( "<hr>Laberinto sin solución<hr>" );
#Sino, un título más
echo "<h1>Resuelto</h1>";
#Y redibujo el array que se ha reescrito en el proceso mostrando la solución
dibujarLaberinto();
?>
__________________
Mi punto de partida es Que Bueno Lo Nuevo