Как вернуть массив маршрутов из функции в задаче навигатора? - PullRequest
0 голосов
/ 23 октября 2019

Я не программист по профессии и сам учу 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
...
...