Informatika gyűjtemény

Egy szinttel feljebb fg_kar.pas

2004050607080910

NézetNyomtat

fg_kar.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
{$Q+} {$R+}
PROGRAM karavan;
CONST
    maxn = 100;
    maxm = 5000;
VAR
    inputFile, outputFile: STRING;

    N, M: INTEGER;
    v1, v2: ARRAY [1..maxm] OF BYTE;
    n1, n2: ARRAY [1..maxm] OF INTEGER;
    ido: ARRAY [1..maxn] OF INTEGER;

    a, b: BYTE;
    H: INTEGER;
PROCEDURE Betolt;
VAR
    T: Text;
    i: INTEGER;
BEGIN
    Assign(T, inputFile);
    Reset(T);
    ReadLn(T, N, M);
    FOR i:= 1 TO M DO
    BEGIN
        ReadLn(T, v1[i], v2[i], n1[i], n2[i]);
    END;
    ReadLn(T, a, b, H);
    Close(T);
END; {Betolt}

FUNCTION Csokkent(k: INTEGER): BOOLEAN;
VAR
    startnap: INTEGER;
    start, cel: BYTE;
BEGIN
    start := v1[k];
    cel:= v2[k];
    IF (ido[start] > n2[k]) OR (ido[start] = -1) THEN
    BEGIN
        csokkent:= FALSE
    END
    ELSE {es ido[v] > -1}
    BEGIN
        IF ido[start] <= n1[k] THEN startnap:= n1[k]
        ELSE startnap:= ido[start];

        IF (startnap + 1 < ido[cel]) OR (ido[cel] = -1) THEN
        BEGIN
            ido[cel]:= startnap + 1;
            Csokkent:= TRUE;
        END
        ELSE Csokkent:= FALSE;
    END;
END; {Csokkent}

FUNCTION Leghamarabb(t: INTEGER): INTEGER;
VAR
    i: INTEGER;
    kesz: BOOLEAN;
BEGIN
    FOR i:= 1 TO N DO ido[i]:= -1;
    ido[A]:= t;

    REPEAT
        kesz:= TRUE;
        FOR i:= 1 TO M DO
        BEGIN
            IF Csokkent(i) THEN kesz:= FALSE;
        END;
    UNTIL kesz;
    IF ido[B] = -1 THEN Leghamarabb:= -1
    ELSE Leghamarabb:= ido[B] - 1;
END; {Leghamarabb}

PROCEDURE Megold;
VAR
    T: Text;

    lh, lh0, leg_rovidebb, leg_kesobb, utso, i: INTEGER;
BEGIN
    lh0:= Leghamarabb(1);

    utso:= n2[1];
    FOR i:= 2 TO M DO
    BEGIN
        IF n2[i] > utso THEN utso:= n2[i];
    END;

    leg_rovidebb:= -1;
    leg_kesobb:= -1;

    lh:= lh0;
    FOR i:= 1 TO utso DO
    BEGIN
        {kihasznalom, hogy Leghamarabb(1) mar lefutott,
        es, hogy ha egy nap elindulva mar nem erunk celba,
        akkor kesobb elindulva sem...}
        IF (> 1) AND (lh <> -1) THEN lh:= Leghamarabb(i);
        IF lh > -1 THEN
        BEGIN
            IF (lh <= H) AND (> leg_kesobb) THEN leg_kesobb:= i;
            IF (lh - i + 1 < leg_rovidebb) OR (leg_rovidebb = -1) THEN
                leg_rovidebb:= lh - i + 1;
        END;
    END;
    Assign(T, outputFile);
    Rewrite(T);
    WriteLn(T, lh0);
    WriteLn(T, leg_rovidebb);
    WriteLn(T, leg_kesobb);
    Close(T);
END; {Megold}

PROCEDURE Foprog;
VAR
    i: BYTE;
BEGIN
    {FOR i:= 1 TO 8 DO}
    BEGIN
        Write('sorszam: '); ReadLn(i);
        inputFile:= 'karavan.be'+CHR(i+ORD('0'));
        outputFile:= 'karavan.k'+CHR(i+ORD('0'));
        WriteLn('bemenet: ', inputFile);
        WriteLn('kimenet: ', outputFile);
        Betolt;
        Megold;
    END;
END; {Foprog}

BEGIN
    Foprog;
END.
(Vissza)