Cod sursa(job #1628840)

Utilizator RADU98Cotisel Radu RADU98 Data 4 martie 2016 10:58:48
Problema Algoritmul lui Dijkstra Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.05 kb
Program dijkstra;
const inf=10000;
var s:array[0..5000] of boolean;
t,d:array[0..5000] of integer;
f:text;
n,m,i:integer;
cost:array[0..5000,0..5000] of integer;

procedure citire;
var i,j,x,y,c:integer; f:text;
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
cost[i,j]:=inf
else
cost[i,j]:=0;

for i:=1 to m do
begin
readln(f,x,y,c);
cost[x,y]:=c;
end;
close(f);
end;


procedure initializare(x:integer);
var i:integer;
begin
t[x]:=-1;
for i:=1 to n do
begin
if (i<>x) and (cost[x,i]<maxint) then
t[i]:=x;
d[i]:=cost[x,i];
end;
s[x]:=true;
end;


procedure dijkstra(x:integer);
var dmin,k,i:integer;
begin
for k:=1 to n-1 do
begin
dmin:=inf;
for i:=1 to n-1 do
if (d[i]<dmin) and (not s[i]) then
dmin:=d[i];

for i:=1 to n do
if d[i]>d[k]+cost[k,i] then
begin
d[i]:=d[k]+cost[k,i];
t[i]:=k;
end;

s[k]:=true;
end;
end;


BEGIN
CITIRE;
INITIALIZARE(1);
DIJKSTRA(1);
assign(f,'dijkstra.out');rewrite(f);
FOR I:=2 TO N DO
WRITE(f,d[i],' ');
close(f);
end.