Результат
Пример: Маршрут из v1 в v3. Вес маршрута L13=5
s0=v1, k1=P13=2, s1=v2, k2=P23=5, s2=v5, k3=P53=3, s3=v3
маршрут v1v2v5v3
#define n 5 // В языке C удобно нумеровать вершины от 0 до n-1 typedef float sometype; sometype L[n][n], T; // тип значений весов int P[n][n], i,j,k; // номера вершин – целые числа
// L,P каким-либо образом инициализированы…
#define inf (-1) // inf –значение представления бесконечности
for (k=0;k<n;k++) // цикл по шагам (номерам промежуточных вершин)
//начала и концы не совпадают с промежуточной вершиной for (i=0;i<n;i++) // цикл по началам маршрутов
//цикл по концам маршрутов, если первая часть есть if ((i!=k)&& (L[i][k]!=inf)) for (j=0;j<n;j++)
// если вторая часть есть и не петля if ((j!=k)&&(j!=i)&&(L[k][j]!=inf)) {
T=L[i][k]+L[k][j];
if ((L[i][j]==inf)||(T<L[i][j])) {
L[i][j]=T;
P[i][j]=P[i][k];
}
}