Informatika gyűjtemény

Egy szinttel feljebb fg_hegyseg3.pas

2004050607080910

NézetNyomtat

fg_hegyseg3.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
{
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;
    
    list: ARRAY [1..10001] OF RECORD
        sor, oszlop: BYTE;
    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}

FUNCTION Terjeszt(VAR sp: INTEGER; i, j: BYTE): BOOLEAN;
VAR
    i0, j0: BYTE;
BEGIN
    i0:= list[sp].sor; j0:= list[sp].oszlop;
    IF (map[i, j].hi > 0) AND (map[i, j].hi < map[i0, j0].hi) THEN
    BEGIN
        IF sp > map[i, j].max THEN
        BEGIN
            map[i, j].max:= sp;
            INC(sp);
            list[sp].sor:= i; list[sp].oszlop:= j;
            Terjeszt:= TRUE;
            EXIT;
        END;
    END;
    Terjeszt:= FALSE;
END; {Terjeszt}

PROCEDURE Process;
VAR
    i, j, s, o: BYTE;
    max_i, max_j: INTEGER;
    sp: INTEGER;
BEGIN
    FOR i:= 1 TO N DO
    BEGIN
        FOR j:= 1 TO M DO
        BEGIN
            {Megallunk a lokalis maximumoknal, es megnezzuk a beloluk kiindulo
             leghosszabb utakat.}
            IF (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 CONTINUE;
            
            {Melysegi bejaras a lejtos utakon, szamolja a tavolsagot az aktualistol
             es mindig szetagazik.}
            list[1].sor:= i; list[1].oszlop:= j;
            sp:= 1;
            WHILE sp > 0 DO
            BEGIN
                s:= list[sp].sor; o:= list[sp].oszlop;
                IF Terjeszt(sp, s+1, o) THEN CONTINUE;
                IF Terjeszt(sp, s-1, o) THEN CONTINUE;
                IF Terjeszt(sp, s, o+1) THEN CONTINUE;
                IF Terjeszt(sp, s, o-1) THEN CONTINUE;
                DEC(sp);
            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)