В моем графе отсутствуют такие ребра, которые соединяют вершину с самим собой. Между двумя вершинами существует только одно ребро. От Wikipedia я узнал о некотором алгоритме, который используется для вычисления кратчайшего пути на основе данных условий. Один из самых известных алгоритмов - Dijkstra's algorithm
, который находит кратчайшие пути от исходной вершины ко всем другим вершинам графика.
Но, используя Dijkstra's algorithm
, мне не нужно исследовать все вершины, однако моя цель - найти самый короткий путь от одного источника до одного места назначения. Какую стратегию я должен использовать здесь? Так что мне не нужно исследовать все остальные вершины.Кратчайший путь от одного источника до одного назначения в графе
Один из моих подходов - использование bidirectional bfs
. К bidirectional bfs
Я имею в виду применить два bfs
один от source node
, еще один от destination node
. Как только в первый раз, когда я найду то же самое child
в обоих деревах, я могу остановить оба bfs
. Теперь путь от источника к этому дочернему пути union
от моего ребенка до места назначения будет моим самым коротким путем от источника к месту назначения.
Но из всех подходов, описанных в Википедии, и bidirectional bfs
, какой из них лучше всего подходит для моего графика?
родственный: http://stackoverflow.com/questions/2655880/how-to-optimize-dijkstra-algorithm-for-a-single-shortest-path-between-2-nodes –
@KshitijMehta: Должен ли я примените [алгоритм Дейкстры] (http://stackoverflow.com/questions/2655880/how-to-optimize-dijkstra-algorithm-for-a-single-shortest-path-between-2-nodes) здесь? Это лучший способ для моего графика? –
Вы можете работать с поиском A *, но это включает в себя использование эвристических функций и более основан на «искусственном интеллекте». Помимо этого, Dijkstra - ваш лучший вариант. –