Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 3 KB
PROGRAM Ut;
CONST
N = 9;
M = 19;
VAR
map: ARRAY [0..N+1, 0..M+1] OF BOOLEAN;
red: ARRAY [0..N+1, 0..M+1] OF BOOLEAN;
volt: ARRAY [0..N+1, 0..M+1] OF BOOLEAN;
PROCEDURE Kirajzol(fal, piros: CHAR);
VAR
sor, oszlop: BYTE;
BEGIN
FOR sor:= 0 TO N+1 DO
BEGIN
FOR oszlop:= 0 TO M+1 DO
BEGIN
IF NOT map[sor, oszlop] THEN Write(fal)
ELSE IF red[sor, oszlop] THEN Write(piros)
ELSE Write(' ');
END;
WriteLn;
END;
END;
FUNCTION Ut(sor1, oszlop1, sor2, oszlop2: BYTE): BOOLEAN;
VAR
volt: BOOLEAN;
sor, oszlop: BYTE;
PROCEDURE Szomsz(s, o, s2, o2: BYTE; VAR volt: BOOLEAN);
BEGIN
IF (map[s2, o2] = TRUE) AND (red[s2, o2] = FALSE) THEN
BEGIN
volt:= TRUE;
red[s2, o2]:= TRUE;
END;
END;
BEGIN
FOR sor:= 0 TO N+1 DO
BEGIN
FOR oszlop:= 0 TO M+1 DO
BEGIN
red[sor, oszlop]:= FALSE;
END;
END;
red[sor1, oszlop1]:= TRUE;
REPEAT
volt:= FALSE;
FOR sor:= 1 TO N DO
BEGIN
FOR oszlop:= 1 TO M DO
BEGIN
IF (red[sor, oszlop]) THEN
BEGIN
Szomsz(sor, oszlop, sor+1, oszlop , volt);
Szomsz(sor, oszlop, sor , oszlop+1, volt);
Szomsz(sor, oszlop, sor-1, oszlop , volt);
Szomsz(sor, oszlop, sor , oszlop-1, volt);
END;
END;
END;
UNTIL (volt = FALSE) OR (red[sor2, oszlop2]);
Ut:= red[sor2, oszlop2];
END;
PROCEDURE Feltolt;
VAR
sor, oszlop: BYTE;
BEGIN
FOR sor:= 0 TO N+1 DO
BEGIN
FOR oszlop:= 0 TO M+1 DO
BEGIN
map[sor, oszlop]:= NOT
((sor = 0) OR (sor = N+1) OR (oszlop = 0) OR (oszlop = M+1) OR
((sor MOD 2 = 0) AND (oszlop MOD 2 = 0)));
volt[sor, oszlop]:= FALSE;
END;
END;
END;
PROCEDURE Kezel(sor, oszlop: BYTE);
BEGIN
IF sor MOD 2 = 0 THEN
BEGIN
map[sor, oszlop]:= FALSE;
map[sor, oszlop]:= NOT Ut(sor-1, oszlop, sor+1, oszlop);
END
ELSE
BEGIN
map[sor, oszlop]:= FALSE;
map[sor, oszlop]:= NOT Ut(sor, oszlop-1, sor, oszlop+1);
END;
END;
PROCEDURE Main;
VAR
sor, oszlop: BYTE;
osszes, maradek, szamlalo, x: INTEGER;
BEGIN
osszes:= N * M DIV 2 - 1;
FOR maradek:= osszes DOWNTO 1 DO
BEGIN
x:= Random(maradek) + 1;
szamlalo:= 0;
FOR sor:= 1 TO N DO
BEGIN
FOR oszlop:= 1 TO M DO
BEGIN
IF (sor MOD 2 + oszlop MOD 2 = 1) AND
(volt[sor, oszlop] = FALSE) THEN
BEGIN
INC(szamlalo);
IF szamlalo = x THEN
BEGIN
volt[sor, oszlop]:= TRUE;
Kezel(sor, oszlop);
BREAK;
END;
END;
END;
IF szamlalo = x THEN BREAK;
END;
END;
map[1, 0]:= TRUE;
map[N, M+1]:= TRUE;
Kirajzol('#', ' ');
END;
BEGIN
Randomize;
Feltolt;
Main;
END.