jzoj 1898. 【2014.8.17NOIP普及组模拟】数池塘
2016-08-23 11:23
507 查看
1898. 【2014.8.17NOIP普及组模拟】数池塘(lkcount.pas/c/cpp)
(File IO): input:lkcount.in output:lkcount.out
时间限制: 1000 ms 空间限制: 128000KB 具体限制
Goto ProblemSet
题目描述
农夫约翰的农场可以表示成N*M(1<=N<=100,1<=M<=100)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水('W')或者没有积水('.')。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的。现给出约翰农场的图样,要求输出农场上的池塘数。
每次从没搜索过的点开始搜,把与之相邻的点标记,搜索的次数就是答案。
const maxn=102; dx:array[1..8] of longint=(-1,-1,0,1,1,1,0,-1); dy:array[1..8] of longint=(0,1,1,1,0,-1,-1,-1); var a:array[0..maxn+1,0..maxn+1] of char; f:array[0..maxn+1,0..maxn+1] of longint; m,n,i,j,ans:longint; procedure init; var i,j:longint; begin readln(n,m); for i:=1 to n do begin for j:=1 to m do begin read(a[i,j]); if a[i,j]='W' then f[i,j]:=1; end; readln; end; end; function check(x,y:longint):boolean; begin check:=true; if (x<1) or (y<1) or (x>100) or (y>100) or (a[x,y]='.') or (f[x,y]<>1) then exit(false); end; procedure dfs(x,y:longint); var i:longint; begin for i:=1 to 8 do if check(x+dx[i],y+dy[i]) then begin f[x+dx[i],y+dy[i]]:=2; dfs(x+dx[i],y+dy[i]); end; end; begin assign(input,'lkcount.in'); reset(input); assign(output,'lkcount.out');rewrite(output); init; for i:=1 to n do for j:=1 to m do if (a[i,j]='W') and (f[i,j]=1) then begin dfs(i,j); inc(ans); end; writeln(ans); close(input);close(output); end.
相关文章推荐
- 【2014.8.17NOIP普及组模拟】数池塘
- 【2014.8.17NOIP普及组模拟】数池塘//2018.2.3
- 【2014.8.17NOIP普及组模拟】愤怒的牛//2018.2.2
- 【2014.8.17NOIP普及组模拟】【高精度乘法】公牛数学(bullmath.pas/c/cpp) //2018.2.2
- 【2014.8.17NOIP普及组模拟】公牛数学
- jzoj 【2014.8.17NOIP普及组模拟】公牛数学
- 【2014.8.17NOIP普及组模拟】愤怒的牛
- jzoj 1897. 【2014.8.17NOIP普及组模拟】愤怒的牛
- jzoj 1899. 【2014.8.17NOIP普及组模拟】接苹果
- 【2014.8.17NOIP普及组模拟】接苹果
- 【2014.8.17NOIP普及组模拟】接苹果//2018.2.3
- 【NOIP普及组模拟】采药
- 2016.10.05【初中部 NOIP普及组 】模拟赛
- 【2016.10.6NOIP普及模拟】Stairs
- 【模拟】[NOIP2011普及组]统计单词数
- 【NOIP普及组模拟】DNA排序
- 2063. 【2016.10.4NOIP普及模拟】Exam
- 【2016.10.6NOIP普及模拟】Queen
- 2016.5.28【初中部 NOIP普及组 】模拟赛
- 【jzoj】2018.2.5NOIP普及组——C组模拟赛