Cod sursa(job #882440)

Utilizator rustymantoma danut rustyman Data 19 februarie 2013 09:05:06
Problema Algoritmul lui Dijkstra Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.28 kb
type matrice=array[1..10000,1..10000] of integer;
     vector=array[1..10000] of integer;
const x:byte=2000;
var a:matrice;
    s,d,t:vector;
    n,i,o,b,m:integer;
    f1:text;
procedure drum(i:integer);
begin
if t[i]<>0 then drum(t[i]);
write(i,'->');
end;
function ver(s:vector):boolean;
var i:integer;
begin
ver:=false;
for i:=1 to n do
if s[i]<>1 then ver:=true;
end;
function min:integer;
var i,m:integer;
begin
m:=x;
for i:=1 to n do
if (i<>1) and (m>d[i]) and (s[i]<>1) then begin min:=i;
                                       m:=d[i];end;
end;
procedure citire;
var f:text;
    i,j,y:integer;
begin
assign(f,'dijkstra.in');reset(f);
readln(f,n,o);for y:=1 to o do begin
read(f,i,j);
read(f,a[i,j]);
end;
for i:=1 to n do
for j:=1 to n do
if (i<>j) and (a[i,j]=0) then a[i,j]:=x;
for i:=1 to n do begin
d[i]:=a[1,i];
t[i]:=1;
end;
t[1]:=0;
close(f);
end;
begin
citire;
for i:=1 to n do
s[i]:=0;
s[1]:=1 ;
while ver(s) do begin
m:=min;
for i:=1 to n do
if (s[i]<>1) and (d[i]>d[m]+a[m,i]) then begin d[i]:=d[m]+a[m,i];
                                               t[i]:=m;
                                               end;

s[m]:=1;
end;assign(f1,'dijkstra.out');rewrite(f1);
for i:=2 to n do
write(f1,d[i],' ');
close(f1);
end.