//використовуючи зворотній прохід, визначається мінімальний шлях $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);