Я пишу сценарий пути затрат для использования на гексагональных картах. В настоящее время я участвую в «обучении, как идти», этап развития.распознавание и использование 2 допустимых путей при ходьбе по гексагональной карте
В общих чертах код работает. Я могу надежно получить от А до В. Однако, рассмотрим следующую карту:
И последовательность 0406 -> 0405 -> 0505
и 0406 -> 0506 -> 0505
действительны. Я хотел бы пересекать и выводить BOTH пути.
Мой код следующим образом:
public function walkMap($origCol, $origRow, $destCol, $destRow) {
$curRow = $origRow;
$curCol = $origCol;
while (($curRow != $destRow) || ($curCol != $destCol)) {
$newRow = self::getNextMove($curRow,$destRow);
if ($newRow == $curRow) {
$curCol = self::getNextMove($curCol,$destCol);
} else {
$curRow = $newRow;
}
}
}
private function getNextMove($cur,$dest) {
if ($cur < $dest) {
++$cur;
} else if ($cur > $dest) {
--$cur;
}
return $cur;
}
Мой желаемый результат является числовой массив step => hexCoord
, показывающий путь, пройденный. Но я не уверен, как принять вышеуказанный рабочий код, чтобы разумно разветвиться, и, сделав это, как лучше всего сформировать структуру выходных данных ...
Заранее спасибо.
Не найден ли путь '0406 -> 0507 -> 0506 -> 0505', потому что он длиннее других? Вы хотите только найти кратчайшие пути? – Basti
@Basti - да, кратчайший путь всегда. – Drew