Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8579 | Accepted: 4367 |
Description
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
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.
Source
【题意简述】
给出一个M*N的地图,有些地方被雨淹了。
问这些被淹没的地方形成了多少个池塘(连同块)?
( M,N<=100,这里规定任意格子周围的八个格子都是与它相邻的 )
用dfs+染色来实现:
其实和JOJ那道OIL 是一模一样的
#include<stdio.h>
char str[101][101];
int x[8]={-1,0,1,-1,1,-1,0,1},y[8]={-1,-1,-1,0,0,1,1,1};
int num,m,n;
void dfs(int x1,int y1)
{
int i;
str[x1][y1]='.';
for(i=0;i<8;i++)
if(x1+x[i]<m && x1+x[i]>=0 && y1+y[i]<n && y1+y[i]>=0 && str[x1+x[i]][y1+y[i]]=='W')
dfs(x1+x[i],y1+y[i]);
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
num=0;
for(int i=0;i<m;i++)
scanf("%s",str[i]);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(str[i][j]=='W')
{
dfs(i,j);
num++;
}
printf("%d/n",num);
}
return 0;
}