Informatika gyűjtemény

Egy szinttel feljebb fa_ut.dpr

2004050607080910

NézetNyomtat

fa_ut.dpr (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
{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q+,R+,S-,T-,U+,V+,W+,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE CONSOLE}

PROGRAM utvsztoB;
USES SysUtils;

CONST
    n = 11; {sor}
    m = 21; {oszlop}

VAR
    map: ARRAY [0..n+1, 0..m+1] OF BOOLEAN;
    ways: ARRAY [0..n+1, 0..m+1] OF BYTE;


    sor: ARRAY [1..m*n] OF RECORD
        sor, oszlop: BYTE;
    END;
    eleje, vege: INTEGER;

PROCEDURE Init;
VAR
    i, j: INTEGER;
BEGIN
    Randomize;
    FOR i:= 1 TO n DO
    BEGIN
        FOR j:= 1 TO m DO
        BEGIN
            map[i, j]:= Random(3) = 0;
        END;
    END;
    FOR i:= 0 TO n+1 DO
    BEGIN
        map[i, 0]:= TRUE; map[i, m+1]:= TRUE;
    END;
    FOR i:= 0 TO m+1 DO
    BEGIN
        map[0, i]:= TRUE; map[n+1, i]:= TRUE;
    END;
END; {Init}

PROCEDURE Dump;
VAR
    i, j: INTEGER;
BEGIN
    WriteLn('------------');
    FOR i:= 0 TO n+1 DO
    BEGIN
        FOR j:= 0 TO m+1 DO
        BEGIN
            IF ways[i, j] = 2THEN Write('*')
            ELSE IF map[i, j] THEN Write('#')
            ELSE Write(' ');
        END;
        WriteLn;
    END;
    WriteLn('------------');
END; {Dump}

FUNCTION Ut(s1, o1, s2, o2:INTEGER): BOOLEAN;
VAR
    i, j: INTEGER;
    keep: BOOLEAN;
    s, o: INTEGER;
    
    PROCEDURE Add(i, j: INTEGER);
    BEGIN
        IF NOT (map[i, j]) AND (ways[i, j] = 0) THEN
        BEGIN
            sor[vege].sor:= i;
            sor[vege].oszlop:= j;
            ways[i, j]:= 1;
            INC(vege);
        END;
    END; {Add}

BEGIN
    FOR i:= 0 TO n+1 DO
        FOR j:= 0 TO m+1 DO
            ways[i, j]:= 0;

    eleje:= 1;
    vege:= 2;
    sor[eleje].sor:= s1;
    sor[eleje].oszlop:= o1;

    WHILE eleje < vege DO
    BEGIN
        s:= sor[eleje].sor; o:= sor[eleje].oszlop;
        INC(eleje);

        ways[ s, o ]:= 2;
        Add(s+1, o);
        Add(s-1, o);
        Add(s, o+1);
        Add(s, o-1);
    END;

    Ut:= (ways[s2, o2] = 2);
END; {Ut}

BEGIN
    Init;
    Ut(1, 1, n, m);
    Dump;
    ReadLn;
END.
(Vissza)