您的位置:首页 > 其它

基础DFS-Lake Counting

2015-09-22 21:59 225 查看




题目大意:找坑,八连通(八个方向都可以认为坑是连通的),求解有几个坑

解题思路:基本DFS,遍历每个坑,递归把(遍历找每个连通的坑)每个联通的‘W’变成‘.’,DFS调用几次就是有几个坑

#include<stdio.h>
#include<iostream>
using namespace std;
int N,M;
char field[1000][1000];
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(field[nx][ny]=='W' && nx>=0 && nx<N && ny>=0 && ny<M)
{
dfs(nx,ny);
}
}
}
return ;
}
int main()
{
while(cin>>N>>M)
{
for(int i = 0 ; i < N ; i++)
{
scanf("%s",field[i]);
}
int ans = 0;
for(int i = 0 ; i < N ; i++)
{
for(int j = 0 ; j < M; j++)
{
if(field[i][j]=='W')
{
dfs(i,j);
ans ++;
}
}
}
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: