POJ 2386


元のタイトル接続:http://poj.org/problem?id=2386
Lake Counting
Time Limit: 1000 MS
 
メモリLimit: 65536 K
Total Submissions: 18126
 
Acceepted: 9149
Description
Due to recentライヴ、water has pooled in various placces in Farmer John's field、which is represented by rectangle of N x M(1==N<=100;1<=M==100)スクウェア.Each square contains eigther water('W')or dry land('.').Farmer John would like to figure Out hondy ponds have formed in field.A pond is a connected set ofスクウェアウェアウェアウェアウェア。 
Gven a diagram of Farmer John's field、determine how many ponds he has.
Input
*Line 1:Two space-separated integers:N and M 
*Lines 2.N+1:M character s per line representing one row of Farmer John's field.Each character is einther'W'r'.The characters do not have spaces between them.
Output
*Line 1:The number of ponds in Farmer John's field.
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
ベント
OUT DETAILS: 
The re are three ponds:one in the up left,one in the lower left,and one along the right side.
テーマは簡単に述べて、いっしょに雨が降った後にまた水がたまります。どのぐらいの水たまりが必要ですか?上下左右8方向に連結されているのが水たまりです。
図のように水たまりが三つあります。
コードは死ぬと思いますが、コレクションする価値があります。
//       ,          8   ,         x,y  
int nx,ny,x,y;
for(int dx = -1; dx <= 1; dx++)
{
	for(int dy = -1; dy <= 1; dy++)
	{
		nx = x + dx;
		ny = y + dy;
	}
}


//          4   ,    x,y          
int nx,ny,x,y;
int dx[4] = {1,0,-1,0}, dy={0,1,0,-1}
for(int i = 0; i < 4 ; i++)
{
	nx = x + dx[i], ny = y + dy[i];
}
#include<stdio.h>
#define MAX 100

int N,M;
char field[MAX][MAX];
void dfs(int x, int y)
{
    field[x][y] = '.';
	for(int dx = -1; dx <= 1; dx++)
	{
		for(int dy = -1; dy <= 1; dy++)
		{
			int nx = x + dx;
			int ny = y + dy;
			if(nx>=0 && nx<N && ny>=0 && ny<M && field[nx][ny]=='W')
				dfs(nx,ny);
		}
	}
}
int main()
{
	while(scanf("%d%d",&N.&M)!=EOF)
	{
		for(int i = 0; i < N; i++)
		{
			for(int j =0; j < M; j++)
			{
				scanf("%d", &field[i][j]);				
			}
			getchar();
		}
		for(int i = 0; i < N; i++)
		{
			for(int j = 0; j < M; j++)
			{
			    if(field[i][j]=='W')
				{
					dfs(i,j);
					res++;
				}
				
			}
		}
	}
	return 0;
}
水たまりを探すとdfsを何回か探しました。