Programozás‎ > ‎Feladatok‎ > ‎Kisvakond kalandjai‎ > ‎Megoldás‎ > ‎

mp_kisvakond.pas

Letöltés: mp_kisvakond.pas

Program kisvakond;

Type kordinata=record x,y:byte;
                End;
    haz=record ba,jf:kordinata;
                End;

                
Var ret:array[0..101,0..101]of byte;
    T,M,H:byte;
    vakond,barat:kordinata;
    be,ki:text;
    hazak:array[1..50] of haz;
    tart,db,db2:byte;
    hol,hol2:array[1..100] of kordinata;

Procedure beolvas;
Var i:byte;
Begin
assign(be,'vakond.be');
reset(be);
readln(be,M,T);
readln(be,vakond.x,vakond.y,barat.x,barat.y);
readln(be,H);
for i:=1 to H do
    Begin
    readln(be,hazak[i].ba.x,hazak[i].ba.y,hazak[i].jf.x,hazak[i].jf.y);
    End;
close(be);  
End;

Procedure kitolt;
Var i,j,k:byte;
Begin
for i:=1 to H do
    Begin
    for j:=hazak[i].ba.x to hazak[i].jf.x do
        Begin
        for k:=hazak[i].ba.y to hazak[i].jf.y do
            Begin
            ret[j,k]:=255;
            End;
        End;
    End;
for i:=1 to M do
    Begin
    for j:=1 to M do
        Begin
        if ret[i,j]<>255 then ret[i,j]:=254
        End;
    End;
ret[vakond.x,vakond.y]:=0;
for i:=0 to M+1 do
    Begin
    ret[0,i]:=255;
    ret[M+1,i]:=255;
    ret[i,0]:=255;
    ret[i,M+1]:=255;
    End;
End;

Procedure lep;
Var i:byte;
    csinal:boolean;
Begin
csinal:=true;
while (ret[barat.x,barat.y]=254) and (csinal) do
    Begin
    csinal:=false;
    for i:=1 to db do
        Begin
        if ret[hol[i].x+1,hol[i].y]=254 then
            Begin
            ret[hol[i].x+1,hol[i].y]:=tart;
            db2:=db2+1;
            hol2[db2].x:=hol[i].x+1;
            hol2[db2].y:=hol[i].y;
            csinal:=true;
            End;
        if ret[hol[i].x-1,hol[i].y]=254 then
            Begin
            ret[hol[i].x,hol[i].y]:=tart;
            db2:=db2+1;
            hol2[db2].x:=hol[i].x-1;
            hol2[db2].y:=hol[i].y;
            csinal:=true;
            End;
        if ret[hol[i].x,hol[i].y+1]=254 then
            Begin
            ret[hol[i].x,hol[i].y+1]:=tart;
            db2:=db2+1;
            hol2[db2].x:=hol[i].x;
            hol2[db2].y:=hol[i].y+1;
            csinal:=true;
            End;
        if ret[hol[i].x,hol[i].y-1]=254 then
            Begin
            ret[hol[i].x,hol[i].y-1]:=tart;
            db2:=db2+1;
            hol2[db2].x:=hol[i].x;
            hol2[db2].y:=hol[i].y-1;
            csinal:=true;
            End;            
        End;
    db:=db2;
    db2:=0;
    hol:=hol2;
    tart:=tart+1;
    End;
End;

Procedure kiir;
Var i,j:byte;
Begin
for i:=M downto 1 do
    Begin
    for j:=1 to M do
        Begin
        if ret[j,i]=255 then write('X') else write(' ');
        End;
    writeln;    
    End;
End;



Begin
beolvas;
kitolt;
tart:=1;
db:=1;
db2:=0;
hol[1]:=vakond;
lep;
writeln(ret[barat.x,barat.y]);
End.