Cod sursa(job #1429763)

Utilizator mariusadamMarius Adam mariusadam Data 7 mai 2015 00:06:49
Problema Evaluarea unei expresii Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.87 kb
program valuta;

type graf=array[1..100,1..100] of real;

const inf=32000.00;

var     G:graf;
        lg,pred:array[1..100] of integer;
        vmax:array[1..100] of real;
        cd:array[1..10000] of integer;
        viz:array[1..100] of 0..1;
        n,m,s,d:integer;
        f:text;

procedure citire();
var     i,j,k:integer;
        f:text;
begin
        assign(f,'valuta.in'); reset(f);
        readln(f,n,m,s,d);
        for k:=1 to m do
                readln(f,i,j,G[i,j]);
        close(f);
end;

procedure BF();
var     st,sf,i,prec:integer;
begin
        for i:=1 to n do
                vmax[i]:=-inf;
        vmax[s]:=1;
        viz[s]:=1;
        sf:=1;
        st:=1;
        cd[st]:=s;
        while st<=sf do
        begin
                prec:=cd[st];
                viz[prec]:=0;
                for i:=1 to n do
                        if (G[prec,i]>0)and(vmax[i]<vmax[prec]*G[prec,i]) then
                        begin
                                vmax[i]:=vmax[prec]*G[prec,i];
                                lg[i]:=lg[prec]+1;
                                pred[i]:=prec;
                                if viz[i]=0 then
                                begin
                                        sf:=sf+1;
                                        cd[sf]:=i;
                                        viz[i]:=1;
                                end;
                        end;
                st:=st+1;
        end;
end;

procedure drum(i:integer);
begin
        if (i<>0)and(i<>s) then
        begin
                drum(pred[i]);
                write(f,i,' ');
        end;
end;

procedure afiseazaSol();
begin
        writeln(f,lg[d]-1);
        drum(pred[d]);
end;

begin
        citire();
        assign(f,'valuta.out'); rewrite(f);
        BF();
        afiseazaSol();
        close(f);
end.