Люди, объясните пожалуйста алгоритм нахождения кратчайшего пути методом генерирования всех перестановок!
Вот привожу полцедуру, объясните пожалуйста, как она работает. Буду очень благодарен! Полная программа лежит в разделе 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;

.