Мне известно, что алгоритм Дейкстры может найти минимальное расстояние между двумя узлами (или в случае станций метро).Однако мой вопрос касается определения минимального количества пересадок между двумя станциями.Более того, из всех минимальных путей передачи я хочу один с самым коротким временем.
Теперь, чтобы найти путь минимальной передачи, я использую специализированную BFS, применяемую к линиям метро, но это не гарантирует, что найденный путь является самым коротким среди всех других путей минимальной передачи.
Я думал, что, возможно, может помочь изменение алгоритма Дейкстры - эвристическое добавление веса (времени) для каждой передачи, так что это удержит алгоритм от перехода на другую строку.Но в этом случае мне нужно было бы определить вес переноса опытным путем.
Дополнение к вопросу:
Мне рекомендовали добавлять «штраф» каждый раз, когда алгоритм хочет перейти на другую линию метро.Здесь я объясняю некоторые из моих опасений по этому поводу.
Я отложил эту проблему на несколько дней и вернулся к ней сегодня.Еще раз посмотрев на проблему, похоже, что выполнить алгоритм Дейкстры на станциях и выяснить, где происходит передача, сложно, это не так очевидно, как можно подумать.
Вот пример: если у меня есть частичный график (всего 4 станции) и их линии метро: A (красный), B (красный, синий), C (красный), D (синий).Пусть станция А будет источником.И соединения:
---- D (синий) - B (синий, красный) - A (красный) - C (красный) -----
Если я буду следовать алгоритму Дейкстры: сначала я помещаю A в очередь, затем снимаю очередь с A в 1-й итерации и смотрю на ее соседей: B и C, я обновляю их расстояния в соответствии с весами AB и AC.Теперь, несмотря на то, что B соединяет две линии, на данный момент я не знаю, нужно ли мне делать перевод в B, поэтому я не добавляю «штраф» за перевод.Допустим, что расстояние между AB
Так что я не уверен, как эта «задержка» в определении необходимости передачи повлияет на целостность алгоритма.Есть мысли?