Pagini recente » Cod sursa (job #2519647) | Cod sursa (job #3159781) | Cod sursa (job #1863357) | Cod sursa (job #3254797) | Cod sursa (job #1077119)
program dijkstra_infoarena;
var viz:array[1..50000] of 0..1;
d:array[1..250000] of longint;
tata:array[1..50000] of longint;
c:array[1..10000,1..10000] of integer;
n,i,m:longint;
f,g:text;
procedure citire_cost;
var i,j,k:integer;
begin
assign(f,'dijkstra.in'); reset(f);
readln(f,n,m);
for i:=1 to n do
for j:=1 to n do
if i=j then
c[i,j]:=0
else
c[i,j]:=maxint;
for k:=1 to m do
readln(f,i,j,c[i,j]);
close(f);
end;
procedure dijkstra(x0:integer);
var i,j,min,k,ok:integer;
begin
for i:=1 to n do
begin
d[i]:=c[x0,i];
viz[i]:=0;
tata[i]:=x0;
end;
viz[x0]:=1;
tata[x0]:=1;
ok:=1;
while ok=1 do
begin
min:=maxint;
for i:=1 to n do
if (viz[i]=0) and (min>d[i]) then
begin
min:=d[i];
k:=i;
end;
if min<>maxint then
begin
viz[k]:=1;
for i:=1 to n do
if (viz[i]=0) and (d[i]>d[k]+c[k,i]) then
begin
d[i]:=d[k]+c[k,i];
tata[i]:=k;
end;
end
else
ok:=0;
end;
end;
begin
citire_cost;
assign(g,'dijkstra.out'); rewrite(g);
dijkstra(1);
for i:=2 to n do
if (tata[i]<>0) then
if d[i]=maxint then
write(g,0,' ')
else
write(g,d[i],' ');
close(g);
end.