Пусть известен сетевой график (см. рисунок 1) всевозможных маршрутов из пункта 0 в n. Заданы неотрицательные числа lij – длина пути из ni в nj. Считается, что сеть сильно связана, т.е. существует путь между любыми двумя ее вершинами. Требуется определить кратчайший путь из пункта 0 в пункт n (в данном примере n=7).
Рис. 1
Алгоритм Форда:
10. Помечаем вершину 0 индексом a0.
20. Помечаем в порядке нумерации все вершины сетевого графика следующим образом: aj = mini,j [ai+lij], где i,j – номера вершин.
30. Находим значение an – длину кратчайшего пути.
40. Двигаясь от конца сетевого графика к началу, определяем дуги, входящие в кратчайший путь, как дуги, для которых min [aj-ai] = lij.
Решение:
1. a0=0
2. a1=l01=1
a2=min[0+4;1+2]=3
a3=min[0+6;3+1]=4
a4=min[3+5;4+2]=6
a5=min[4+2;6+3]=6
a6=min[6+1;1+7]=7
a7=min[7+2;6+5;6+4]=9
3. Итак, an=a7=9
4. Двигаясь от конца к началу, определяем дуги, входящие в кратчайший путь из условия min [aj-ai] = lij.
из 7: min[a7-a6; a7-a4; a7-a5]=min[9-7;9-6;9-6]=2, 76
из 6: min[a6-a4; a6-a1]=min[7-6;7-1]=1, 764
из 4: min[a4-a2; a4-a3]=min[6-3;6-4]=2, 7643
из 3: min[a3-a2; a3-a0]=min[4-1;4-0]=3, 76432
из 2: min[a2-a1; a2-a0]=min[3-1;3-0]=2, 764321
из 1: [a1-a0]=1, 7643210
Значит, кратчайший путь 0®1®2®3®4®6®7.
Длина пути an=9.