Cod sursa(job #149187)

Utilizator DonPushmeMilitaru Adrian DonPushme Data 5 martie 2008 13:44:38
Problema Algoritmul lui Dijkstra Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.84 kb
const inf=32000;
type vec=array [1..2,1..500000] of longint;
     vec2=array[0..50000] of longint;
var v:vec;
    d,viz,t,nr,nr1:vec2;
    i,j,n,m:integer;

procedure citire;
var a,b,c,i:longint;
begin
read(n,m);
nr[0]:=1;
for i:=1 to m do
        begin
        read(a,b,c);
        inc(nr[a]);
        inc(nr[b]);
        end;

for i:=1 to n do
        nr[i]:=nr[i]+nr[i-1];

nr1:=nr;
reset(input);
read(n,m);
for i:=1 to m do
        begin
        read(a,b,c);
        v[1,nr1[a-1]]:=b;
        v[2,nr1[a-1]]:=c;
        inc(nr1[a-1]);

        v[1,nr1[b-1]]:=a;
        v[2,nr1[b-1]]:=c;
        inc(nr1[b-1]);
        end;
end;

procedure dijkstra(nod:integer);
var mini,min,i,j:integer;
begin
for i:=0 to n do
        d[i]:=inf;
d[nod]:=0;


for j:=1 to n do
        begin
        viz[nod]:=1;

        for i:=nr[nod-1] to (nr[nod]-1) do
                begin
                if (d[v[1,i]]>d[nod]+v[2,i]) then
                                        begin
                                        d[v[1,i]]:=d[nod]+v[2,i];
                                        t[v[1,i]]:=nod;
                                        end;
                end;
        min:=inf;
        mini:=0;
        for i:=1 to n do
                if viz[i]=0 then
                        if min>d[i] then
                                                begin
                                                min:=d[i];
                                                mini:=i;
                                                end;
        nod:=mini;
        end;

end;

begin {main}
assign(input,'dijkstra.in');reset(input);
assign(output,'dijkstra.out');rewrite(output);

citire;

dijkstra(1);

for i:=2 to n do
        if d[i]=inf then write(0,' ')
                    else write(d[i],' ');
close(input);
close(output);
end.