uses crt;
const n=10;
r:array[1..8] of integer = (-1,-1,-1, 0,0, 1,1,1);
p:array[1..8] of integer = (-1, 0, 1,-1,1,-1,0,1);
type mas=array[1..n,1..n] of integer;
var i,j,k,m,x,y,b,s,h,o,g,xk,yk,flag,xo,yo,tc:integer;
f:char;
a,c:mas;
procedure sum(x,y:integer);
var xk,yk,i:integer;
begin
o:=0;
xk:=x;
yk:=y;
for i:=1 to 8 do begin
if ((xk+r[i] > 0) and (xk+r[i]<n+1)) and ((yk+p[i] >0) and(yk+p[i]<n+1)) then begin
if a[xk+r[i],yk+p[i]]=-1 then begin
o:=o+1;
end;
end;
end;
if o=0 then a[xk,yk]:=-3
else a[xk,yk]:=o;
end;
Procedure Open( x, y : integer);
begin
if ((x>0)and(y>0)and(x<=n)and(y<=n)and((a[x,y] =0 ))) then
begin
sum(x,y);
Open(x,y-1);
Open(x-1,y);
Open(x,y+1);
Open(x+1,y);
//Open(x-1,y-1);
//Open(x-1,y+1);
//Open(x+1,y-1);
//Open(x+1,y+1);
end
end;
Рекурсия открывает все поле
Всем доброго времени суток.Возникла вот такая пробдемка: рекурсия открывает все поле,прошу помочь решить данную проблему.Заранее спасибо.
Код:
Procedure Open( x, y : integer);
begin
if ((x>0)and(y>0)and(x<=n)and(y<=n) and (a[x,y]=0) and (a[x,y]<>-6)) then
begin
a[x,y]:=-6;
c[x,y]:=-6;
Open(x,y-1);
Open(x-1,y);
Open(x,y+1);
Open(x+1,y);
end
else if ((x>0)and(y>0)and(x<=n)and(y<=n) and (a[x,y]>0)) then begin
c[x,y]:=a[x,y];
end;
end;
begin
if ((x>0)and(y>0)and(x<=n)and(y<=n) and (a[x,y]=0) and (a[x,y]<>-6)) then
begin
a[x,y]:=-6;
c[x,y]:=-6;
Open(x,y-1);
Open(x-1,y);
Open(x,y+1);
Open(x+1,y);
end
else if ((x>0)and(y>0)and(x<=n)and(y<=n) and (a[x,y]>0)) then begin
c[x,y]:=a[x,y];
end;
end;