{<dijistra><O(N*N)>}
const
maxn=10000;
type
link=^node;
node=record x,dis:longint; next:link; end;
var
{data of dijistra}
g:array[1..maxn] of link;
dist:array[1..maxn] of longint;
v:array[1..maxn] of boolean;
n:longint;
procedure connect(i,x,dis:longint);
var
p:link;
begin
new(p);
p^.x:=x;
p^.dis:=dis;
p^.next:=g[i];
g[i]:=p;
end;
procedure upload(i:longint);
var
p:link;
begin
v[i]:=true;
p:=g[i];
while p<>nil do begin
if (not v[p^.x])and(dist[i]+p^.dis<dist[p^.x]) then dist[p^.x]:=dist[i]+p^.dis;
p:=p^.next;
end;
end;
procedure dijistra(s:longint);
var
i,j,k,min:longint;
begin
for i:=1 to n do begin dist[i]:=maxlongint; v[i]:=false; end;
dist[s]:=0; upload(s);
for i:=2 to n do begin
min:=maxlongint;
for j:=1 to n do
if (not v[j])and(dist[j]<min) then begin
k:=j; min:=dist[j];
end;
upload(k);
end;
end;
begin
end.
Dijistra算法模版
最新推荐文章于 2023-12-07 11:12:22 发布