Informatika gyűjtemény

Egy szinttel feljebb fg_epit.pas

2004050607080910

NézetNyomtat

fg_epit.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 Epitkezes;
CONST
    maxn = 200;

VAR
    inputFile, outputFile: STRING;

    eloz: ARRAY [1..maxn, 1..maxn] OF BOOLEAN;
    munka: ARRAY [1..maxn] OF BYTE;
    nap: ARRAY [1..maxn] OF BYTE;
    torolt: ARRAY [1..maxn] OF BOOLEAN;
    N: BYTE;


PROCEDURE Alap;
VAR
    i, j: BYTE;
BEGIN
    FOR i:= 1 TO maxn DO
    BEGIN
        torolt[i]:= FALSE;
        FOR j:= 1 TO maxn DO
        BEGIN
            eloz[i, j]:= FALSE;
        END;
    END;
END; {Alap}

PROCEDURE Betolt;
VAR
    Tx: Text;
    K, T: INTEGER;
    i: INTEGER;
    a, b: BYTE;
BEGIN
    Assign(Tx, inputFile);
    Reset(Tx);
    ReadLn(Tx, N, K, T);
    a := 0;
    FOR i:= 1 TO K DO
    BEGIN
        Read(Tx, b);
        IF <> 0 THEN eloz[a, b]:= TRUE;
        a := b;
    END;

    FOR i:= 1 TO T DO
    BEGIN
        ReadLn(Tx, a, b);
        eloz[a, b]:= TRUE;
    END;
    Close(Tx);
END; {Betolt}

PROCEDURE MegoldasKi(M: BYTE);
VAR
    T: Text;
    i, j: BYTE;
BEGIN
    Assign(T, outputFile);
    Rewrite(T);
    WriteLn(T, M);
    j:= 1;
    FOR i:= 1 TO M DO
    BEGIN
        WHILE (<= N) AND (nap[j] = i) DO
        BEGIN
            Write(T, munka[j], ' ');
            INC(j);
        END;
        WriteLn(T);
    END;
    Close(T);
END; {MegoldasKi}

PROCEDURE Torol(i: BYTE);
VAR
    j: BYTE;
BEGIN
    torolt[i] := TRUE;
    FOR j:= 1 TO N DO
    BEGIN
        eloz[i, j]:= FALSE;
        eloz[j, i]:= FALSE;
    END;
END; {Torol}

FUNCTION Forras(i: BYTE): BOOLEAN;
VAR
    j: BYTE;
BEGIN
    j:= 1;
    WHILE (<= N) AND (eloz[j, i] = FALSE) DO INC(j);
    Forras:= j > N;
END; {Forras}

PROCEDURE Megold;
VAR
    i, M, kesz: BYTE;
    voltuj: BOOLEAN;
BEGIN
    M:= 0; kesz:= 0;
    REPEAT
        voltuj:= FALSE; INC(M);
        FOR i:= 1 TO N DO
        BEGIN
            IF (torolt[i] = FALSE) AND (Forras(i)) THEN
            BEGIN
                voltuj:= TRUE;
                INC(kesz);
                nap[kesz]:= M; munka[kesz]:= i;
            END;
        END;
        IF voltuj THEN
        BEGIN
            i:= kesz;
            WHILE (> 0) AND (nap[i] = nap[kesz]) DO
            BEGIN
                Torol(munka[i]);
                DEC(i);
            END;
        END;
    UNTIL voltuj = FALSE;
    DEC(M);
    
    IF kesz < N THEN M:= 0;
    MegoldasKi(M);
END; {Megold}

PROCEDURE Foprog;
VAR
    id: CHAR;
BEGIN
    Write('azonosito: '); ReadLn(id);
    inputFile:= 'epitkez.be'+id;
    outputFile:= 'epitkez.k'+id;
    Alap;
    Betolt;
    Megold;
END; {Foprog}

BEGIN
    Foprog;
END.
(Vissza)