POJ2386 Lake Counting——Floodfill

来源:互联网 发布:税务局开票软件下载 编辑:程序博客网 时间:2024/06/12 23:51

标准的floodfill即可,在floodfill的过程中累加ans.

CODE

Program POJ2386;Const maxn=105;ddx:Array[1..8]of Integer=(0,0,1,1,1,-1,-1,-1);ddy:Array[1..8]of Integer=(-1,1,0,1,-1,0,-1,1);Typerec=recordx,y:Longint;end;Varmap:Array[0..maxn,0..maxn]of Char;v:Array[0..maxn,0..maxn]of Boolean;ch:Char;i,j,k,m,n,ans:Longint;seq:Array[0..maxn*maxn]of rec;Procedure Floodfill(x,y:Longint);var h,t,i,j,a,b:Longint;beginh:=0;t:=1;seq[t].x:=x;seq[t].y:=y;while h<t do begininc(h);a:=seq[h].x;b:=seq[h].y;for i:=1 to 8 doif (a+ddx[i]<=n)and(a+ddx[i]>0)and(b+ddy[i]<=m)and(b+ddy[i]>0)thenif (map[a+ddx[i],b+ddy[i]]='W')and(not v[a+ddx[i],b+ddy[i]]) then beginv[a+ddx[i],b+ddy[i]]:=true;inc(t);seq[t].x:=a+ddx[i];seq[t].y:=b+ddy[i];end;end;end;BEGINreadln(n,m);for i:=1 to n do beginfor j:=1 to m do read(map[i,j]);readln;end;ans:=0;fillchar(v,sizeof(v),0);for i:=1 to n do for j:=1 to m doif (not v[i,j])and(map[i,j]='W') then beginFloodfill(i,j);inc(ans);end;writeln(ans);END.

原创粉丝点击