рівні нескінченності
x [u]=0;// І немає найкоротшого шляху ні для однієї вершини
}
int v;
h [s]. v=0;// S - початок шляху, тому цій вершині нічого не передує
t [s]=0;// Найкоротший шлях з s в s дорівнює 0
x [s]=1;// Для вершини s знайдений найкоротший шлях
v=s;// Робимо s поточної вершиною
while (1)
{
/ / Перебираємо всі вершини, суміжні v, і шукаємо для них найкоротший шлях
for (u=0; u
{(a [v] [u] == 0) continue;// Вершини u і v несуміжні (x [u] == 0 && t [u]> t [v] + a [v] [u]) / / Якщо для вершини u ще
/ / знайдений найкоротший шлях
/ / і новий шлях в u коротше ніж
/ / старий, то
{
t [u]=t [v] + a [v] [u];// Запам'ятовуємо більш коротку довжину шляху в
/ / масив t і
h [u]. v=v;// Запам'ятовуємо, що v-> u частина найкоротшого
/ / шляху з s-> u
}
}
/ / Шукаємо з усіх довжин некратчайшіх шляхів найкоротший
int w=infinity;// Для пошуку найкоротшого шляху
v=- 1;// Наприкінці пошуку v - вершина, в яку буде
/ / знайдений новий найкоротший шлях. Вона стане
/ / поточної вершиною
for (u=0; u
{
if (x [u] == 0 && t [u]
/ / шлях і якщо довжина шляху в вершину u менше
/ / вже знайденої, то
{
v=u;// Поточної вершиною стає u-я вершина
w=t [u];
}
} (v == - 1)
{+=infinity;
/ / Memo1-> Lines-> Add («Ні шляху з вершини»);
break;
}
if (v == g && t [g] <100) / / Найден найкоротший шлях,
{/ / виводимо його
sumB +=t [g];
break;
} [v]=1;
}
}
} (sumDl> sumB) {= versh;=sumB;
}
} (punkt!=- 1) {-> Lines-> Add («Це пункт« + IntToStr (punkt)); 1 -> Lines-> Add (»- Виводимо маршрути - »);
/ / тепер вираховуючи маршрути до кожного пункту і виводимо їх
for (int versh=0; versh
s=punkt;// Номер вихідної вершини
int g=versh;// Номер кінцевої вершини
int * x;// Масив, що містить одиниці і нулі для кожної вершини,
/ / x [i]=0 - ще не знайдено найкоротший шлях в i-ю вершину,
/ / x [i]=1 - найкоротший шлях в i-ю вершину вже...