Cod sursa(job #1615581)

Utilizator deepsterescuCraciunescu Denis Bogdan deepsterescu Data 26 februarie 2016 18:02:23
Problema Algoritmul lui Dijkstra Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.54 kb
program dijkstra;
const pinfinit=maxint;
type    mat_c=array[1..30000,1..30000] of integer;
var     a:mat_c;
        s,t:array[1..50000] of integer;
        d:array[1..50000] of integer;
        n,m,i,j,r,poz,min:integer;
        f,g:text;


procedure citire;
var    m,x,y,z: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 a[i,j]:=0 else a[i,j]:=pinfinit;
        for i:=1 to m do begin
                readln(f,x,y,z);
                a[x,y]:=z;
                end;
        close(f);
end;

begin
citire;
assign(g,'dijkstra.out'); rewrite(g);
r:=1;
s[r]:=1;
for i:=1 to n do
        begin
        d[i]:=a[r,i];
        if i<>r then
         if d[i]<pinfinit then t[i]:=r;
        end;
for i:=1 to n-1 do
        begin
        min:=pinfinit;
        for j:=1 to n do
                if s[j]=0 then
                        if d[j]<min then
                                begin
                                min:=d[j]; poz:=j;
                                end;
        s[poz]:=1;
        for j:=1 to n do
                if s[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
        if d[i]<> pinfinit then
        write(g,d[i],' ') else write (g,'0 ');
close(g);
end.