Алгоритм решения.
1°. Присвоить вершине метку 0.
2°. Если и
, то присвоить каждой такой вершине метку 1.
3°. Пусть — множество вершин, имеющих метку
. Вершинам множества
при
присвоить метку
.
4°. Процесс присвоения вершинам меток прекратить, как только вершина получит некоторую метку
.
5°. Рассмотреть вершины , такие, что
Замечание: Если на некотором шаге невозможно присвоение метки от значения вершинам в силу того, что множество
пусто, и вершина
не получила метки, то это означает, что в графе
не существует никакого пути, соединяющего вершину
с вершиной
.
Доказательство того, что применение правил алгоритма всегда приводит к решению задачи 1, основывается на том очевидном факте, что вершины множества — это все те вершины, в которые можно попасть из вершины
по путям, содержащим ровно
дуг, и нельзя попасть по пути длины меньшей, чем
.
2. Путь кратчайшей длины. Рассмотрим теперь случай, когда каждой дуге графа
сопоставлено положительное число
. Это число
можно назвать длиной дуги. Длиной пути
назовем сумму длин дуг, входящих в путь
:
.
Возникает следующая задача. Найти в графе путь
кратчайшей длины, соединяющий вершину
с вершиной
.
Алгоритм решения.
1°. Перенумеровать вершины графа так, чтобы вершина
получила номер 0. Обозначить вершину
через
. (При этом вершина
совпадет с некоторой вершиной
).
2°. Присвоить каждой вершине метку
так, чтобы
при
.
3°. Найти такую дугу , для которой
. (Полагаем, что
.) У вершины
заменить метку
на новую, меньшую метку
.
4°. Применять правило 3° до тех пор, пока для каждой дуги не станет справедливым неравенство:
.
5°. Во множестве найти такую вершину
, что
.
Аналогично, во множестве найти такую вершину , чтобы было справедливо равенство
и т. д.
После некоторого числа шагов вершина совпадет с вершиной
.
Путь — кратчайший, его длина равна
.