Люди, объясните пожалуйста алгоритм нахождения кратчайшего пути методом генерирования всех перестановок!
Вот привожу полцедуру, объясните пожалуйста, как она работает. Буду очень благодарен! Полная программа лежит в разделе faq.

procedure sortlines;
var k,i,j:integer;
w:integer;
begin
for i:=1 to n do
for j:=1 to n do
b[i,j]:=j; {непонятно как выглядит данная матрица, приведите пожалуйста пример}
for k:=1 to n do {откуда сдесь фигурирует k?}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[k,b[k,i]]>a[k,b[k,j]] then {это сравнение чего?}
begin
w:=b[k,i]; {как происходит данная перестановка?}
b[k,i]:=b[k,j];
b[k,j]:=w;
end;
end;

.