Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/11/2012, 07:57
Avatar de YeisonSoto
YeisonSoto
 
Fecha de Ingreso: enero-2011
Ubicación: Cali, Colombia, Colombia
Mensajes: 116
Antigüedad: 13 años, 10 meses
Puntos: 4
Analisis Problema de las 8 reinas (Bactraking)

Hola amigos tengo un pequeño problema con el algoritmo de las 8 reinas.....

Código PHP:
<?php

function ocho_reinas($pos$solucion$diagonal_desc$diagonal_asc) {

 if(
$pos 7){ //Validación para saber si ha terminado de recorrer todas las posibles soluciones.
 
 
echo "{";
     foreach(
$solucion as $i =>$j ){ //Recorre el Array de soluciones para mostrarlas.
     
     
echo "".$j.",";
     
         if(
$i==7){
         echo 
"}";
            echo 
"<br>";     
         }
     }
}
 else {
      
     for (
$i 0$i 8$i++) { //Recorremos las filas
     
  
         
if(!in_array($i$solucion) AND !in_array(($pos+$i), $diagonal_asc) AND !in_array(($pos-$i), $diagonal_desc) ) {
         
//Entra , si esa casilla no está amenazada!
                    
         
             
$diagonal_asc[$pos] = $pos+$i//diagonal ascendente.
             
$diagonal_desc[$pos] = $pos-$i//diagonal descendente.

             
$solucion[$pos] = $i;    //Se guarda una posición valida.
             
    
        
ocho_reinas($pos+1$solucion$diagonal_desc$diagonal_asc);
            
        }
         
  }
}

$pos 0//Posicion inicial
$solucion = Array();//posibles soluciones.
$diagonal_desc = Array();//diagonales descendentes 
$diagonal_asc = Array();//diagonales ascendentes .

ocho_reinas($pos$solucion$diagonal_desc$diagonal_asc);//Se llama al metodo de la lógica de las reinas.


?>

He hecho la prueba de escritorio



los datos que arroja son los mismos hasta cierto punto comparandolos con los que muestra la ejecucion del algoritmo...(filas-->valores, Columnas--> indices del array)

- Tengo una duda, como funciona el la parte recursiva del lagortmo?, es decir c por ejemplo cuando la i del for va en 1 y se cumple la condicion if(!in_array($i, $solucion)....), al llamar mi metodo recursivamente, el for continua con su ietraccion normalmente? es decir sigue con i =2, i=3... y asi sucesivante, o vuelve a iniciar en 0???

espero que me puedan ayudar...

Gracias...

Algortimo http://squadronsuicida.99k.org/Reinas/Reinas.php.
Descarga http://squadronsuicida.99k.org/Reinas/Reinas.txt

Prueba http://squadronsuicida.99k.org/Reinas/Reinas_Prueba.php.
Descarga http://squadronsuicida.99k.org/Reinas/Reinas_Prueba.txt