Эта проблема хорошо изучена: проблема Планирование поездки в сетях общественного транспорта .
Ваш подход, основанный на Беллмане-Форде, может стать проблематичным и слишком дорогим в зависимости от сети, поскольку вы не можете считать, что вершина «посещена», или что кратчайший путь к вершине был вычислен уже во время выполнения алгоритма.
Эти понятия («посещенные» или «кратчайшие») могут применяться только к одной объективной проблеме кратчайших путей. Это потому, что при u, v
паре вершин существует потенциально экспоненциальное количество интересных путей, потому что вы не можете рассмотреть только более быстрый или более дешевый вариант. Вы должны хранить в памяти любой путь, чтобы не было другого, более дешевого и быстрого пути, и это число путей может быстро выйти из-под контроля, если вы начнете работать в реалистичных сетях (которые могут быть довольно большими, ~ 100 тыс. Остановок, и миллионы поездок).
Я предлагаю вам прочитать о многоцелевой проблеме кратчайшего пути , с дополнительным фактом, что обычно граф, представляющий сеть, является графиком, зависящим от времени.
Я думаю, что вам стоит почитать эту страницу на многоцелевом кратчайшем пути, чтобы иметь представление об основных методах, используемых в данной области (понятие Pareto-set или Pareto-frontier очень важно понять, что касается этой проблемы), и даже более того, разделы 2 и 4 этой статьи , которые описывают современное состояние техники в отношении таких методов.
Несмотря на кажущийся сложным, большинство из них могут работать невероятно быстро (в сотни тысяч раз быстрее, чем Dijkstra, и все же намного быстрее, чем любой подход на основе A *), и для некоторых из них не слишком сложно реализовать (для Например, CSA не слишком сложен и работает довольно быстро, он может вычислить простой запрос за несколько миллисекунд в сети размером с страну).