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. |