Pagini recente » Cod sursa (job #1049258) | Cod sursa (job #2285111) | Cod sursa (job #1470231) | Cod sursa (job #1938866) | Cod sursa (job #152294)
Cod sursa(job #152294)
program djkstra;
const Inf=999999;
var c:array[1..100,1..100]of Longint;
d:array[1..100]of Longint;
viz:array[1..100]of boolean;
t:array[1..100] of integer;
n,m,i0:longint;
f:text;
procedure Citeste;
var i,j,k,l:Longint;
begin
assign(f,'dijkstra.in');reset(f);
readln(f,n,m);{readln(f,i0);}
i0:=1;
for i:=1 to n do
for j:=1 to n do c[i,j]:=Inf;
for i:=1 to n do c[i,i]:=0;
for i:=1 to m do begin
readln(f,j,k,l);
c[j,k]:=l;
c[k,j]:=l;
end;
close(f);
end;
procedure Drum(vf:integer);
begin
if vf=i0 then write(i0,' ')
else begin
Drum(t[vf]);
write(vf,' ');
end;
end;
procedure Dijkstra;
var i,j,k,min:Longint;
begin
for i:=1 to n do begin
viz[i]:=false;
d[i]:=c[i0,i];
if d[i]<Inf then t[i]:=i0
else t[i]:=0;
end;
viz[i0]:=true;d[i0]:=0;t[i0]:=0;
for i:=1 to n-1 do
begin
min:=Inf;
for j:=1 to n do if (not viz[j])and(d[j]<min) then
begin
min:=d[j];
k:=j;
end;
viz[k]:=true;
for j:=1 to n do
if (not viz[j])and(d[j]>d[k]+c[k,j]) then
begin
t[j]:=k;
d[j]:=d[k]+c[k,j];
end;
end;
end;
procedure scrie;
var i:integer;
begin
assign(f,'dijkstra.out');rewrite(f);
{for i:=1 to n do begin
writeln('Costul minim al unui drum de la ',i0, 'la ',i,' este ',d[i]);
writeln('Drumul este: ');
drum(i);
end; }
for i:=2 to n do write(f,d[i],' ');
close(f);
end;
begin
Citeste;
Dijkstra;
Scrie;
end.