Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 24697 | Accepted: 12475 |
Description
Input
Output
Sample Input
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
Sample Output
3
Hint
There are three ponds: one in the upper left, one in the lower left,and one along the right side.
简单DFS
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define M(i,n,m) for(int i = n;i < m;i ++)
#define N(n,m) memset(n,m,sizeof(n));
const int MAX = 111;
using namespace std;
int s[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
char a[MAX][MAX];
int b[MAX][MAX],n,m;
void dfs(int x,int y)
{
b[x][y] = 1;
M(i,0,8)
{
int t1 = x + s[i][0];
int t2 = y + s[i][1];
if(t1 >= 0 && t1 < n && t2 >= 0 && t2 < m && a[t1][t2] == 'W' && !b[t1][t2])
{
b[t1][t2] = 1;
dfs(t1,t2);
}
}
return;
}
int main()
{
int sum;
while(~scanf("%d%d",&n,&m))
{
if(!n && !m)
break;
N(b,0)
sum = 0;
M(i,0,n)
scanf("%s",a[i]);
M(i,0,n)
M(j,0,m)
if(a[i][j] == 'W' && !b[i][j])
{
sum ++;
dfs(i,j);
}
printf("%d\n",sum);
}
}