题目大意:有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个方向任一方向相连即可。