Я пытаюсь написать (или расширить существующий) алгоритм поиска в графе, который позволит мне найти путь к ближайшему узлу назначения, учитывая, что нет никакой гарантии, что узлы будут соединены.
Чтобы обеспечить реалистичное применение этого, скажем, мне нужно перебраться из Брамптона, Онтарио, в Гамильтон, Онтарио. Я знаю, что мои возможные варианты в моей начальной точке: местный транспорт, GO bus или Walking. Я знаю, что ходьба - наименее желательный способ добраться до места назначения, поэтому я сначала смотрю на автобус GO. Я знаю, что могу подвести GO к точке, близкой к Гамильтону, но в этот момент шина GO поворачивается и движется в другом направлении в той самой точке, где у меня нет вариантов (кроме как ходить, но алгоритм будет учитывать только ходьбу). на короткие расстояния, в противном случае маршрут будет считаться невозможным)
Используя этот же пример, если бы алгоритм нашел, что я могу найти путь, который длиннее, но приближает меня к узлу назначения (или, возможно, к узлу назначения), который был бы с более взвешенным путем (Веса) не имеет большого значения при поиске, только когда результаты будут доставлены, в нем будет указан список, по которому путь был ближайшим к месту назначения в порядке возрастания). Например, один автобус GO может доставить меня в 3 км от узла назначения, в то время как 3 общественных автобуса доставят меня на расстояние 500 м
Итак, мой вопрос состоит из двух частей:
1) С какого алгоритма мне начинать что-то похожее
2) Как бы я программно объяснил, что это нормально, если узлы не соединяются, чтобы он не просто перепрыгивал с узла A на узел R. Начал бы с конца и работал в обратном направлении, чтобы достичь этого
Редактировать: Я забыл спросить, как стремиться к наилучшему приближенному решению, потому что, особенно при большом графике, возможно, найдутся миллионы решений этой проблемы.
Спасибо,
Майкл