Шаг 1. Присвоение начальных значений. Для исходной вершины s положим l (s) = 0 и эта пометка будет постоянной. Для всех других вершин имеем: 1(хi) = ¥ " xi ¹ s. Эти пометки временные. Положим p = s и составим множество образов этой вершины: G(p).
Шаг 2. Обновление пометок. Для всех xi Î G(p), пометки которых являются временными, изменить пометки в соответствии с выражением:
1(хi) = min [1(хi), 1(р) + c(p, xi)] (8)
Шаг 3. Превращение пометок в постоянные. Среди всех вершин с временными пометками найти такую xi*, для которой l(xi*) = min[l(xi)]. Считать пометку вершины xi* постоянной и положить р = xi*.
Шаг 4. Переход к шагу 2, если р ¹ t. Останов при р = t. В случае, если требуется найти лишь путь от s к одной вершине t, следует окончание счета. Длина этого кратчайшего пути будет 1(р).
При необходимости нахождения путей от s ко всем остальным вершинам графа переходим к шагу 2. Продолжаем вычисления, пока все вершины не получат постоянные пометки. Эти отметки и дают длины кратчайших путей от s к этим вершинам.
Проиллюстрируем работу алгоритма на примере графа, изображенного на рис. 3.34. Матрица весов – в табл. 3.4. Граф является смешанным, т. е. ребра у него ориентирова-нные и неориентированные. Требуется найти все кратчайшие пути от x1 ко всем остальным вершинам. Постоянные пометки будем обозначать знаком +.
Шаг 1. l(x1) = 0+, 1(xi) = ¥ " xi ¹ x1, р = x1.