Mai intai trebuie sa te autentifici.
Cod sursa(job #694296)
Utilizator | Data | 27 februarie 2012 19:43:38 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 1.65 kb |
program dijksra;
const inf=1001;
var fi,fo:text;
m,n:integer;
a:Array[1..5000,1..5000]of integer;
d,t,viz:array[1..1000]of integer;
procedure citire;
var i,j,c:integer;
begin
readln(fi,n,m);
for i:=1 to n do
for j:=1 to n do
if i=j then a[i,j]:=0
else a[i,j]:=inf;
while not seekeof(fi) do
begin
readln(fi,i,j,c);
a[i,j]:=c;
a[j,i]:=c;
end;
end;
procedure drum(i:integer);
begin
if t[i]<>0 then
drum(t[i]);
write(i,' ');
end;
procedure dij;
var r,i,j,min,poz:integer;
begin
//read(r);
r:=1;
viz[r]:=1;
for i:=1 to n do
begin
d[i]:=a[r,i];
if i<>r then
if d[i]<>inf then
t[i]:=r;
end;
for i:=1 to n-1 do
begin
min:=inf;
for j:=1 to n do
if viz[j]=0 then
if d[j]<min then
begin
min:=d[j];
poz:=j;
end;
viz[poz]:=1;
for j:=1 to n do
if viz[j]=0 then
if d[j]>d[poz]+a[poz,j] then
begin
d[j]:=d[poz]+a[poz,j];
t[j]:=poz;
end;
end;
for i:=2 to n do
begin
write(fo, d[i],' ');
end;
end;
begin
assign(fi,'dij.in'); reset(fi);
assign(fo,'dij.out'); rewrite(fo);
citire;
dij;
close(fi); close(fo);
end.