Cod sursa(job #963636)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 17 iunie 2013 22:35:02
Problema Algoritmul Bellman-Ford Scor 35
Compilator fpc Status done
Runda Arhiva educationala Marime 0.91 kb
program bellman_ford;
  var bufin,bufout:array [1..100000] of byte;
      n,m,i,j:longint;
      first,second,cost,drum:array [1.. 50000] of longint;
      ok:boolean;

begin
  assign(input,'bellmanford.in');
  reset(input);
  settextbuf(input,bufin);
  assign(output,'bellmanford.out');
  rewrite(output);
  settextbuf(output,bufout);

  readln(n,m);
  for i:=1 to m do readln(first[i],second[i],cost[i]);
  for i:=1 to n do drum[i]:=-1;
  drum[1]:=0;
  for i:=1 to n-1 do
    for j:=1 to m do
      begin
        if (drum[first[j]]<>-1) and ((drum[second[j]]=-1)
            or(drum[first[j]]+cost[j]<drum[second[j]])) then
              drum[second[j]]:=drum[first[j]]+cost[j];
      end;

  ok:=true;
  for i:=1 to m do
    if drum[first[i]]+cost[i]<drum[second[i]] then ok:=false;
  if ok then
    for i:=2 to n do write(drum[i], ' ')
        else writeln('Ciclu negativ!');
  close(output);
end.