Алгоритм типа Беллмана-Форда, только для многократного запуска, одного пункта назначения?

Такие алгоритмы, как алгоритм Беллмана-Форда и алгоритм Дейкстры, существуют для поиска кратчайшего пути от одной начальной вершины графа до любой другой вершины. Однако в программе, которую я пишу, начальная вершина меняется гораздо чаще, чем конечная. Какой алгоритм выполняет обратное действие, т. е. при наличии единственной вершины назначения находит кратчайший путь из каждой начальной вершины?


person flarn2006    schedule 27.02.2015    source источник
comment
Также рассмотрите возможность использования алгоритма Роя-Флойда, если ваши узлы сильно меняются.   -  person IVlad    schedule 28.02.2015


Ответы (2)


Просто переверните все ребра и обработайте пункт назначения как начальный узел. Задача решена.

person Pham Trung    schedule 27.02.2015
comment
Не могу поверить, что я не подумал об этом. Я попробую и, возможно, отмечу ваш ответ как принятый (поскольку вы ответили первым). Спасибо! - person flarn2006; 27.02.2015
comment
потрясающий ОТВЕТ :))) - person DmitrySemenov; 21.04.2018

Если это неориентированный граф: я думаю, что обращение проблемы даст вам преимущества. Просмотрите фактический пункт назначения в качестве начала и найдите кратчайший путь от него до всех остальных узлов в графе. Делая это, вы можете использовать традиционные алгоритмы пути.

person Andrew_CS    schedule 27.02.2015
comment
Формулируя это таким образом (вместо того, чтобы переворачивать края), предполагается, что расстояние симметрично (что может быть хорошо, просто нужно помнить об этом) - person harold; 27.02.2015
comment
@harold Это было бы правдой, если бы ребра были взвешены - я не предполагал, что будут веса ребер, поскольку в ОП они не упоминались. - person Andrew_CS; 28.02.2015