【2014.8.17NOIP普及组模拟】数池塘//2018.2.3
2018-02-04 12:03
253 查看
题目
题目描述农夫约翰的农场可以表示成N*M(1<=N<=100,1<=M<=100)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水(’W’)或者没有积水(’.’)。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的。
现给出约翰农场的图样,要求输出农场上的池塘数。
输入
第1行:由空格隔开的两个整数:N和M
第2..N+1行:每行M个字符代表约翰农场的一排方格的状态。每个字符或者是’W’或者是’.’,字符之间没有空格。
输出
第1行:约翰农场上的池塘数
题目大意
农场上有“W”“.”的状态,相连的“W”是一个池塘,求池塘数
解题思路
只要没有搜过,就继续深搜……
代码
#include<cstdio> #include<iostream> using namespace std; int n,m,ans; bool a[110][110]; void dfs(int x,int y) { if (x<1||y<1||x>n||y>m) return; //边界处理 if (a[x][y]==false) return; //如果已经搜过或是“.” a[x][y]=false; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); dfs(x-1,y-1); dfs(x+1,y+1); dfs(x-1,y+1); dfs(x+1,y-1); //八个方向深搜 } int main() { freopen("lkcount.in","r",stdin); freopen("lkcount.out","w",stdout); scanf("%d%d",&n,&m); char c; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { cin>>c; if (c=='W') a[i][j]=true; //布尔储存 } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) if (a[i][j]==true) { ans++; dfs(i,j); //深搜 } printf("%d",ans); //输出 }
相关文章推荐
- jzoj 1898. 【2014.8.17NOIP普及组模拟】数池塘
- 【2014.8.17NOIP普及组模拟】数池塘
- 【2014.8.17NOIP普及组模拟】接苹果//2018.2.3
- jzoj 【2014.8.17NOIP普及组模拟】公牛数学
- jzoj 1897. 【2014.8.17NOIP普及组模拟】愤怒的牛
- 【2014.8.17NOIP普及组模拟】愤怒的牛
- 【2014.8.17NOIP普及组模拟】愤怒的牛//2018.2.2
- 【2014.8.17NOIP普及组模拟】【高精度乘法】公牛数学(bullmath.pas/c/cpp) //2018.2.2
- jzoj 1899. 【2014.8.17NOIP普及组模拟】接苹果
- 【2014.8.17NOIP普及组模拟】接苹果
- 【2014.8.17NOIP普及组模拟】公牛数学
- NOIP2016年普及组模拟考试(9.3) 1.笨笨玩游戏
- noip1996 格子位置 - 普及组 (模拟)
- 【2016.10.4NOIP普及模拟】Exam
- NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军
- NOIP2010-普及组复赛模拟试题-第一题-手机
- 【jzoj】2018/2/2 NOIP普及组——D组模拟赛
- B. 【NOIP2018普及级别模拟】危险系数
- 【NOIP普及组】2016模拟考试(10.29)——海港的船只
- 2016.08.18【初中部 NOIP普及组 】模拟赛