题目大意:有N*M的矩阵稻田,'W'表示有积水的地方, '.'表示是干旱的地方,问稻田内一共有多少块积水,根据样例很容易得出,积水是8个方向任一方向相连即可。
/* * POJ_2386.cpp * * Created on: 2013年12月17日 * Author: Administrator */ #include <iostream> #include <cstdio> using namespace std; const int maxn = 105; char mp[maxn][maxn]; int n,m; void dfs(int x,int y){ mp[x][y] = '.';//把现在的位置替换为. int dx,dy; int nx,ny; for(dx = -1 ; dx <=1 ; ++dx ){ for(dy = -1 ; dy <= 1; ++dy){ //向x方向移动dx,向y方向移动dy,得到结果坐标(nx,ny) nx = x+dx; ny = y+dy; //判断(nx,ny)是否在院子里&&该点是否有积水 if(nx >= 0 && nx < n && ny >= 0 && ny < m && mp[nx][ny] == 'W'){ dfs(nx,ny); } } } return ; } void solve(){ int i,j; int ans = 0;//用来标记有多少洼水 for(i = 0 ; i < n ; ++i){ for(j = 0 ; j < m ; ++j){ if(mp[i][j] == 'W'){ dfs(i,j); ans++; } } } printf("%d\n",ans); } int main(){ while(scanf("%d%d",&n,&m)!=EOF){ int i; for(i = 0 ; i < n ; ++i){ scanf("%s",&mp[i]);//对于一串连续的字符,可以以这种形式读取... } solve(); } }
题目大意:有N*M的矩阵稻田,'W'表示有积水的地方, '.'表示是干旱的地方,问稻田内一共有多少块积水,根据样例很容易得出,积水是8个方向任一方向相连即可。