Пример #1
0
        //використовуючи зворотній прохід, визначається мінімальний шлях
        $shortStack = new SplStack();
        //найкоротший шлях як стек
        $node = $target;
        $dist = 0;
        //прохід від цільового вузла до стартового
        while (isset($prevNode[$node]) && $prevNode[$node]) {
            $shortStack->push($node);
            $dist += $this->graph[$node][$prevNode[$node]];
            //додавання дистанції для попередників
            $node = $prevNode[$node];
        }
        //стек буде пустий, якщо нема шляху назад
        if ($shortStack->isEmpty()) {
            $this->res .= "Немає шляху із " . $source . " в " . $target;
        } else {
            //добавлення стартового вузла, виведення всього шляху
            $shortStack->push($source);
            $this->res .= "{$dist}:  ";
            $sep = '';
            foreach ($shortStack as $v) {
                $this->res .= $sep . $v;
                $sep = '->';
            }
        }
        return $this->res;
    }
}
$g = new Algorithm($graph, '');
$res["res"] = $g->shortestPath($_POST['source'], $_POST['target']);
echo json_encode($res);