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 zombi;
CONST
fileBase = 'zombi';
extBe = 'be';
extKi = 'kix';
maxn = 101;
maxIdo = maxn*maxn*2+1;
VAR
inputFile, outputFile : STRING;
id: BYTE;
N, M: BYTE;
map: ARRAY [0..maxn+1, 0..maxn+1] OF CHAR;
ido: ARRAY [0..maxn+1, 0..maxn+1] OF INTEGER;
osszido: INTEGER;
PROCEDURE Init;
VAR
sor, oszlop: BYTE;
BEGIN
FOR sor:= 0 TO maxn+1 DO
BEGIN
FOR oszlop:= 0 TO maxn+1 DO
BEGIN
ido[sor, oszlop]:= maxIdo;
map[sor, oszlop]:= '#';
END;
END;
END;
PROCEDURE Betolt;
VAR
T: Text;
sor, oszlop: BYTE;
BEGIN
Assign(T, inputFile);
Reset(T);
ReadLn(T, N, M);
FOR sor:= 1 TO N DO
BEGIN
FOR oszlop:= 1 TO M DO
BEGIN
Read(T, map[sor, oszlop]);
END;
ReadLn(T);
END;
Close(T);
END;
PROCEDURE UtKeres(VAR osszido: INTEGER);
VAR
volt: BOOLEAN;
sor, oszlop: BYTE;
ujido: INTEGER;
PROCEDURE Szomszed(s, o: BYTE);
BEGIN
IF (map[s, o] <> '#') AND (ujido < ido[s, o]) THEN
BEGIN
ido[s, o]:= ujido;
volt:= TRUE;
END;
END;
BEGIN
ido[N, M]:= 0;
REPEAT
volt:= FALSE;
FOR sor:= 1 TO N DO
BEGIN
FOR oszlop:= 1 TO M DO
BEGIN
IF (map[sor, oszlop] <> '#') AND
(ido[sor, oszlop] < maxIdo) THEN
BEGIN
ujido:= ido[sor, oszlop];
IF map[sor, oszlop] = 'Z' THEN INC(ujido, 2)
ELSE INC(ujido);
Szomszed(sor+1, oszlop);
Szomszed(sor-1, oszlop);
Szomszed(sor, oszlop+1);
Szomszed(sor, oszlop-1);
END;
END;
END;
UNTIL volt = FALSE;
osszido:= ido[1, 1];
IF map[1, 1] = 'Z' THEN INC(osszido, 2)
ELSE INC(osszido);
END;
FUNCTION Lehete(sor, oszlop, sz_sor, sz_oszlop: BYTE): BOOLEAN;
VAR
t: INTEGER;
BEGIN
IF map[sz_sor, sz_oszlop] <> '#' THEN
BEGIN
t:= ido[sz_sor, sz_oszlop];
IF map[sz_sor, sz_oszlop] = 'Z' THEN INC(t, 2)
ELSE INC(t);
Lehete:= (t = ido[sor, oszlop]);
END
ELSE Lehete:= FALSE;
END;
PROCEDURE Kiir;
VAR
sor, oszlop: BYTE;
T: Text;
BEGIN
Assign(T, outputFile);
Rewrite(T);
WriteLn(T, osszido);
sor:= 1; oszlop:= 1;
WriteLn(T, sor, ' ', oszlop);
REPEAT
IF Lehete(sor, oszlop, sor+1, oszlop) THEN INC(sor)
ELSE IF Lehete(sor, oszlop, sor-1, oszlop) THEN DEC(sor)
ELSE IF Lehete(sor, oszlop, sor, oszlop+1) THEN INC(oszlop)
ELSE IF Lehete(sor, oszlop, sor, oszlop-1) THEN DEC(oszlop);
WriteLn(T, sor, ' ', oszlop);
UNTIL ido[sor, oszlop] = 0;
Close(T);
END;
BEGIN
Write('sorszam: '); ReadLn(id);
BEGIN
inputFile:= fileBase+CHR(id+ORD('0'))+'.'+extBe;
outputFile:= fileBase+CHR(id+ORD('0'))+'.'+extKi;
Init;
Betolt;
UtKeres(osszido);
Kiir;
END;
END.