знайдений
x=new int [n];
int * t;// T [i] - довжина найкоротшого шляху від вершини s в i
t=new int [n];
el * h;// H [i] - вершина, що передує i-й вершині
/ / на найкоротшому шляху
h=new el [n];
/ / Ініціалізіруем початкові значення масивів
int u;// Лічильник вершин
for (u=0; u
{
t [u]=infinity;// Спочатку все найкоротші шляхи з s в i
/ / рівні нескінченності
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];
}
}
if (v == - 1)
{
Memo1-> Lines-> Add («Ні шляху з вершини»);
break;
}
if (v == g) / / Найден найкоротший шлях,
{/ / виводимо його
Memo1-> Lines-> Add («Шлях з мінімальною величиною з вершини« + IntToStr (s) + »в вершину« + IntToStr (g) + »(у зворотному порядку)») ;
u=g;> Image1-> Canvas-> Pen-> Color=RGB (0, 0, 255); k=0; (u!=s)