Este es un código que obtuve del sitio here y me gustaría saber si esta implementación de A * es correcta. Lo he visto y lo comparo con la página de wikipedia y parece válido. La razón por la que pregunto es porque en el sitio dice que todavía hay un error en este código, intenté encontrarlo pero no pude encontrar ninguno. Quiero cambiarlo, aunque por lo que se necesita un origen y de destino como parámetro de entradaImplementación A * en validación de PHP
<?php
class AStarSolver
{
function solve(&$s)
{
include_once('PQueue.class.php');
$o = new PQueue();
$l = array();
$c = array();
$p = array();
$a = $s->getStartIndex();
$z = $s->getGoalIndex();
$d = $s->goalDistance($a);
$n0 = array('g'=>0, 'h'=>$d, 'i'=>$a, 'p'=>NULL, 'f'=>$d);
$o->push($n0, -$d);
$l[$a] = TRUE;
while (! $o->isEmpty())
{
$n = $o->pop();
if ($n['i'] == $z)
{
while ($n)
{
$p[] = $n['i'];
$n = $n['p'];
}
break;
}
foreach ($s->getNeighbors($n['i']) as $j => $w)
{
if ((isset($l[$j]) || isset($c[$j])) && isset($m) && $m['g'] <= $n['g']+$w)
continue;
$d = $s->goalDistance($j);
$m = array('g'=>$n['g']+$w, 'h'=>$d, 'i'=>$j, 'p'=>$n, 'f'=>$n['g']+$w+$d);
if (isset($c[$j]))
unset($c[$j]);
if (! isset($l[$j]))
{
$o->push($m, -$m['f']);
$l[$j] = TRUE;
}
}
$c[$n['i']] = $n;
}
return $p;
}
}
?>
El código para el Pqueue se puede encontrar here
No tenía idea de por qué estaba votando negativamente; este no es un mal tema per se. Sin embargo, las verificaciones de código y algoritmo no están del todo en el tema de Stackoverflow. Por lo tanto, podría eliminar y mover esta pregunta a http://codereview.stackexchange.com/. – mario
@mario No del todo, la Revisión de código requiere que tenga * código de trabajo *, por lo que la detección de errores no está completamente dentro de su ámbito. –
¿Has intentado contactar codezilla para preguntarle sobre su implementación? Después de haber sido votado negativamente por sugerirle esto la primera vez que preguntó por A * en PHP: sigo pensando que parece una implementación válida. Pero esperaré para ver lo que dicen otras personas al respecto. –