nlogn的Dijkstra的 pascal 代码

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:32:56

const maxn=20;
var
f,p:array[1..maxn]of integer;
a:array[1..maxn,1..maxn]of integer;
mark:array[1..maxn]of boolean;
n,s,e:integer;
fin:text;
procedure init;
var i,j:integer;
begin
assign(fin,'dij.in');reset(fin);
readln(fin,n);
for i:=1 to n do
for j:=1 to n do
read(fin,a[i,j]);
write('Start Point (1~',n,'):');readln(s);
write('End Point (1~',n,'):');readln(e);
mark[s]:=true;
end;

procedure show(n:integer);
begin
if p[n]<>0 then show(p[n]);
write(n,' ');
end;

procedure dijkstra;
var
i,j:integer;
bv,bn:integer;
begin
repeat
bv:=0;
for i:=1 to n do
if mark[i] then
for j:=1 to n do
if not(mark[j]) and(a[i,j]>0) then
if (bv=0)or(a[i,j]+f[i]<bv) then begin