Для данного графа вес каждого ребра равен 0 или 1. В графе также указана исходная вершина. Найдите кратчайший путь от исходной вершины до любой другой вершины.
Пример:
Input : Source Vertex = 0 and below graphOutput : Shortest distances from given source 0 0 1 1 2 1 2 1 2 Explanation : Shortest distance from 0 to 0 is 0 Shortest distance from 0 to 1 is 0 Shortest distance from 0 to 2 is 1 ..................
В обычной BFS графа все ребра имеют одинаковый вес, но в 0-1 BFS некоторые ребра могут иметь 0 весов, а некоторые — 1 вес. В этом мы не будем использовать массив bool для маркировки посещенных узлов, но на каждом шаге мы будем проверять условие оптимального расстояния. Мы используем двустороннюю очередь для хранения узла. При выполнении BFS, если найден ребро с весом = 0, узел помещается впереди двухсторонней очереди, а если найдено ребро, имеющее вес = 1, он перемещается в конец двухсторонней очереди.
Подход похож на Dijkstra в том, что если кратчайшее расстояние до узла ослаблено предыдущим узлом, то только оно будет помещено в очередь.
Вышеприведенная идея работает во всех случаях, когда всплывают вершины (например, Дейкстры), это минимальная весовая вершина среди оставшихся вершин. Если к нему примыкает 0 весовая вершина, то эта соседняя имеет такое же расстояние. Если есть смежный вес 1, то у этого смежного есть максимальное расстояние среди всех вершин в очереди (потому что все другие вершины либо смежны с текущей вытолкнутой вершиной, либо смежны с ранее вытолкнутыми вершинами).
Ниже приведена реализация вышеуказанной идеи.
|
Джава
|
python3
|
Выход:
0 0 1 1 2 1 2 1 2
Эта проблема также может быть решена с помощью Дейкстры, но сложность по времени будет O (E + V Log V), тогда как по BFS это будет O (V + E).
Ссылка :
http://codeforces.com/blog/entry/22276
Эта статья предоставлена Аюшем Джа . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Кратчайший путь в взвешенном графике, где вес ребра равен 1 или 2
- Многоступенчатый график (кратчайший путь)
- Кратчайший путь в невзвешенном графе
- Кратчайший путь в направленном ациклическом графе
- Кратчайший путь с ровно k ребрами в ориентированном и взвешенном графе
- Кратчайший путь из нескольких источников в невзвешенном графике
- Проверьте, представляет ли данный путь между двумя узлами графа кратчайшие пути
- Кратчайший путь в двоичном лабиринте
- Кратчайший путь от источника к месту назначения, так что веса ребер вдоль пути альтернативно увеличиваются или уменьшаются
- Преобразовать неориентированный граф в ориентированный граф так, чтобы не было пути длиной больше 1
- Проверьте, существует ли цикл с нечетной весовой суммой в неориентированном графе
- Найти минимальный весовой цикл в неориентированном графике
- k-й самый тяжелый соседний узел в графе, где каждая вершина имеет вес
- Некоторые интересные вопросы кратчайшего пути | Комплект 1
- Кратчайший путь с использованием Meet In The Middle
0.00 (0%) 0 votes