История изменений
Исправление firkax, (текущая версия) :
Никакая переменная путь не хранит. Никакой отдельный путь хранить не нужно, зачем? Есть массив известных путей, он один единственный и его ни с чем не перепутать. В нём хранятся все известные пути сразу.
$ways['f'] = список путей к точке f.
И вот этот самый $ways в цикле дополняется новыми обнаруженными путями по ходу сканирования списка рёбер.
Вот мы знаем путь abef, например, его длина 12. Он записан так: $ways['f']['abef'] = 12.
Смотрим список рёбер, идущих от f:
'f' => array('g'=>2, 'h'=>9, 'j'=>5, 'z'=>3),
и вот, был abef=12 а теперь есть ещё abefg = 12+2, abefh = 12+9, abefj = 12+5, abefz = 12+3 (откуда это взялось надеюсь не надо объяснять). Эти пути мы нигде по-отдельности не храним (зачем?), а сразу записываем в тот же массив $ways:
$ways['g']['abefg'] = 14;
$ways['h']['abefh'] = 21;
$ways['j']['abefj'] = 17;
$ways['z']['abefz'] = 15;
Исходная версия firkax, :
Никакая переменная путь не хранит. Никакой отдельный путь хранить не нужно, зачем? Есть массив известных путей, он один единственный и его ни с чем не перепутать.
$ways['f'] = список путей к точке f.
И вот этот самый $ways в цикле дополняется новыми обнаруженными путями по ходу сканирования списка рёбер.
Вот мы знаем путь abef, например, его длина 12. Он записан так: $ways['f']['abef'] = 12.
Смотрим список рёбер, идущих от f:
'f' => array('g'=>2, 'h'=>9, 'j'=>5, 'z'=>3),
и вот, был abef=12 а теперь есть ещё abefg = 12+2, abefh = 12+9, abefj = 12+5, abefz = 12+3 (откуда это взялось надеюсь не надо объяснять). Эти пути мы нигде по-отдельности не храним (зачем?), а сразу записываем в тот же массив $ways:
$ways['g']['abefg'] = 14;
$ways['h']['abefh'] = 21;
$ways['j']['abefj'] = 17;
$ways['z']['abefz'] = 15;