FOR i:=1 TO n DO
  BEGIN
    B[i]:=TRUE; D[i]:=1000000000;
    Pos[i]:=0;  Tr[i]:=0;
  END;
Pos[Fir]:=1; HP[1]:=Fir;  D[Fir]:=0; Top:=1;
REPEAT
  u:=PopHP;
  IF u=0 THEN Break;B[u]:=FALSE;
  i:=HD[u];
  WHILE i<>0 DO
    BEGIN
      v:=Adj[i];
      Tam:=D[u]+Cost[i];
      IF (Tam<D[v]) AND (B[v]) THEN
        BEGIN
          D[v]:=Tam;
          Capnhat(v);
          Tr[v]:=u;
        END;
      i:=link[i];
    END;
UNTIL U=Fin;
Res:=D[Fin];

 

Bạn nên nêu thêm ý tưởng thuật toán, các cấu trúc dữ liệu sử dụng, các dạng bài tập áp dụng... Chỉ đưa code thôi thì khó hiểu lắm, hơn nữa code này chưa đầy đủ