Я не программист по профессии и сам учу php. Я нашел шаблон задачи «Навигатор» в Интернете (автор задачи пишет, что его можно решить как с помощью рекурсии, так и с помощью алгоритма Дейкстры. Но вы не можете использовать статические переменные). Я использовал рекурсию. Функция считает все правильно, но не возвращает нужный мне массив. Я дополнил свой вопрос фрагментом кода, который я лично написал. Но чего-то не хватает для корректного вывода массива массивов. Task Navigator
Функция, написанная мной:
function makeOneStep($paths, $pathDone, $time, $point, $target)
{
foreach ($paths[$point] as $subPoint => $values) {
if ($subPoint == $target) {
$pathDone[] = $subPoint;
$result = array();
$result['path'] = $pathDone;
$result['time'] = $time + $paths[$point][$subPoint]['time'];
return $result;
} elseif (!in_array($subPoint, $pathDone)) {
$newPathDone = $pathDone;
$newPathDone[] = $subPoint;
$time += $paths[$point][$subPoint]['time'];
return makeOneStep($paths, $newPathDone, $time, $subPoint, $target);
}
}
}
$truePaths[] = makeOneStep($paths, array($startPoint), 0, $startPoint, $endPoint);
var_dump($truePaths);
Пример выходного массива:
$truePaths =>
[0] =>'path'=> {
[0] => "pet"
[1] => "chk"
[2] => "spo"
...
[n] => "nov"}
'time'=> 43
[1] => 'path'=> {
[0] => "pet"
[1] => "gor"
[2] => "vas"
...
[n] => "nov"}
'time'=> 28
[2] => 'path'=> {
[0] => "pet"
[1] => "gor"
[2] => "gos"
...
[n] => "nov"}
'time'=> 105
...