zufeoj_Lake Counting

题目链接:http://acm.ocrosoft.com/problem.php?cid=1222&pid=17


题目描述

题意:有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?


输入

第一行为N,M(1≤N,M≤110)。

下面为N*M的土地示意图。

输出

一行,共有的水洼数。


样例输入

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

样例输出

3


#include
using namespace std;
int n,m;
bool vis[111][111];
char mp[111][111];
int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,0},{1,-1},{1,1}};
void dfs(int x,int y){
	for(int i=0;i<8;i++){
		int xx=x+dir[i][0];
		int yy=y+dir[i][1];
		if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&mp[xx][yy]=='W'){
			mp[xx][yy]='.';
			dfs(xx,yy);
		}
	}
}
int main(){
	while(cin>>n>>m){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>mp[i][j];
			}
		}
		int ans=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(mp[i][j]=='W'){
					mp[i][j]='.';
					dfs(i,j);
					ans++;
				}
			}
		}
		cout<

你可能感兴趣的:(DFS)