Cod sursa(job #694290)

Utilizator amaliutzzaGoia Amalia amaliutzza Data 27 februarie 2012 19:42:57
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.