讨论 / 栈溢出?
Fish、のTorres 2009-08-14 04:40:00
点我顶贴 收藏 删除
var a:array[1..1000,1..1000]of char;

s,m,n,i,j,x1,x2:longint;

procedure xx(x,y:longint);

begin

if (x>=1) and (x<=m) and (y>=1) and (y<=n) then begin

if a[x,y]=’.’ then begin

s:=s+1;

a[x,y]:=’*’;

end;

if (a[x,y]=’.’) or (a[x,y]=’@’) or (a[x,y]=’*’) then begin

xx(x-1,y);

xx(x+1,y);

xx(x,y-1);

xx(x,y+1);

end;

end;

end;

begin

readln(n,m);

for i:=1 to m do begin

for j:=1 to n do begin

read(a[i,j]);

if a[i,j]=’@’ then begin x1:=i;x2:=j;end;

end;

end;

xx(x1,x2);

write(s);

end.

#1 Fish、のTorres@2009-08-05 20:54:00
回复 删除
Up,UP
#2 jerryR1@2009-08-06 05:08:00
回复 删除
程序如下:

var m:array[1..1001,1..1001] of char;

h,w:longint;

i,j:longint;

max,x1,y1:longint;

procedure find(x,y:longint);

begin

if m[x,y]=’#’ then exit;

m[x,y]:=’#’;

inc(max);

if (y>1) then find(x,y-1);

if (y<h) then find(x,y+1);

if (x>1) then find(x-1,y);

if (x<w) then find(x+1,y);

end;

begin

readln(h,w);max:=0;

for i:=1 to w do

begin

for j:=1 to h do

begin

read(m[i,j]);

if m[i,j]=’@’ then begin x1:=i;y1:=j;end;

end;

readln;

end;

find(x1,y1);

write(max);

end.

#3 Fish、のTorres@2009-08-06 06:46:00
回复 删除
不知道为什么,我的程序用FP一运行,fp就自动崩溃
#4 jerryR1@2009-08-06 07:05:00
回复 删除
这道题是典型的“洪水填充”问题。
#5 Fish、のTorres@2009-08-06 07:15:00
回复 删除
我知道啊

水题都刷不过

对不起张老师啊

#6 Fish、のTorres@2009-08-06 07:17:00
回复 删除
var a:array[1..1000,1..1000]of char;

s,m,n,i,j,x1,x2:longint;

procedure xx(x,y:longint);

begin

if a[x,y]=’#’ then exit;

if a[x,y]=’.’ then inc(s);

a[x,y]:=’#’;

if x>1 then xx(x-1,y);

if x<m then xx(x+1,y);

if y>1 then xx(x,y-1);

if y<n then xx(x,y+1);

end;

begin

readln(n,m);

for i:=1 to m do begin

for j:=1 to n do begin

read(a[i,j]);

if a[i,j]=’@’ then begin x1:=i;x2:=j;end;

end;

end;s:=0;

xx(x1,x2);

write(s);

end.

#7 Fish、のTorres@2009-08-13 07:23:00
回复 删除
Up
#8 Jollwish@2009-08-14 04:40:00
回复 删除
首先,您读字符不readln不是找死么

第二,@也得算进去,s不加1不是找死么

再者,a数组搞这么大,虽然不是找死,但也太那啥了

更改后的程序(好久没贴水膘体程序了啊):

var a:array[1..20,1..20]of char;

s,m,n,i,j,x1,x2:longint;

procedure xx(x,y:longint);

begin

if a[x,y]=’#’ then exit;

if a[x,y]=’.’ then inc(s);

a[x,y]:=’#’;

if x>1 then xx(x-1,y);

if x<m then xx(x+1,y);

if y>1 then xx(x,y-1);

if y<n then xx(x,y+1);

end;

begin

readln(n,m);

for i:=1 to m do

begin

for j:=1 to n do

begin

read(a[i,j]);

if a[i,j]=’@’ then

begin

x1:=i;

x2:=j;

end;

end;

readln;

end;

s:=1;

xx(x1,x2);

write(s);

end.

查看更多回复
提交回复