Informatika gyűjtemény

Egy szinttel feljebb fg_hegyseg2.pas

2004050607080910

NézetNyomtat

fg_hegyseg2.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: 1 KB
{
Hegyseg (2001, 3.kat, 3.ford, 3.feladat)
url: http://nttv.gyakg.u-szeged.hu/donto/Nttv01d3.htm
}
{$R+} {$Q+}


PROGRAM hegyseg;
CONST
    inputFile = '';

    maxn = 100;

VAR
    N, M: INTEGER;
    map: ARRAY [0..maxn+1, 0..maxn+1] OF RECORD
        hi: INTEGER;
        max: INTEGER;
    END;

PROCEDURE Load;
VAR
    T: Text;
    i, j: INTEGER;
BEGIN
    FOR i:= 0 TO maxn+1 DO
    BEGIN
        FOR j:= 0 TO maxn+1 DO
        BEGIN
            map[i, j].hi:= -1;
            map[i, j].max:= 0;
        END;
    END;
    Assign(T, inputFile);
    Reset(T);
    ReadLn(T, N, M);
    FOR i:= 1 TO N DO
    BEGIN
        FOR j:= 1 TO M DO
        BEGIN
            Read(T, map[i, j].hi);
            map[i, j].max:= 0;
        END;
        ReadLn(T);
    END;
END; {Load}

PROCEDURE Terjeszt(i0, j0, i, j: BYTE; hossz: INTEGER);
BEGIN
    IF (map[i, j].hi > 0) AND (map[i, j].hi < map[i0, j0].hi) THEN
    BEGIN
        IF hossz > map[i, j].max THEN
        BEGIN
            map[i, j].max:= hossz;
            Terjeszt(i, j, i+1, j, hossz+1);
            Terjeszt(i, j, i-1, j, hossz+1);
            Terjeszt(i, j, i, j-1, hossz+1);
            Terjeszt(i, j, i, j+1, hossz+1);
        END;
    END;
END; {Terjeszt}

PROCEDURE Process;
VAR
    i, j: BYTE;
    max_i, max_j: INTEGER;
BEGIN
    FOR i:= 1 TO N DO
    BEGIN
        FOR j:= 1 TO M DO
        BEGIN
            IF NOT (
               (map[i+1, j].hi > map[i, j].hi) OR
               (map[i-1, j].hi > map[i, j].hi) OR
               (map[i, j+1].hi > map[i, j].hi) OR
               (map[i, j-1].hi > map[i, j].hi)) THEN
            BEGIN
                Terjeszt(i, j, i+1, j, 1);
                Terjeszt(i, j, i-1, j, 1);
                Terjeszt(i, j, i, j+1, 1);
                Terjeszt(i, j, i, j-1, 1);
            END;
        END;
    END;

    max_i:= 1; max_j:= 1;
    FOR i:= 1 TO N DO
    BEGIN
        FOR j:= 1 TO M DO
        BEGIN
            IF map[i, j].max > map[max_i, max_j].max THEN
            BEGIN
                max_i:= i;
                max_j:= j;
            END;
        END;
    END;
    WriteLn(map[max_i, max_j].max);
    WriteLn(max_i, ' ', max_j);
END; {Process}

BEGIN
    Load;
    Process;
END.
(Vissza)