Cod sursa(job #1629868)

Utilizator LaviniutSuciu Lavinia-Florina Laviniut Data 4 martie 2016 19:33:31
Problema Algoritmul lui Dijkstra Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.2 kb
const inf=1000000000;
var cost:array[1..100,1..100]of longint;
    n,i,j:integer;
    d,t:array[1..100]of longint;
    s:array[1..100]of boolean;
    f:text;

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

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

procedure dijstra(x:integer);
var k,i,r:integer;
    dmin:longint;
begin
for r:=1 to n-1 do
 begin
  dmin:=inf;
  for i:=1 to n do
    if (d[i]<dmin)and(not(s[i])) then
     begin
      dmin:=d[i];
      k:=i;
     end;
  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);
dijstra(1);
assign(f,'dijkstra.out');rewrite(f);
for j:=2 to n do
  write(f,d[j],' ');
close(f);
end.