DFS八连块



一道dfs简单题,总而言之就是在遍历下点,看到W就把它周围的全都标记一下,相当于把所有水汇聚到一点(高高高高压水

枪),然后继续遍历到完就行了。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<queue>
#include<cctype>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN = 105;
int n,m;
char Map[MAXN][MAXN];
int flag[MAXN][MAXN];
void dfs(int x,int y,int idx)
{
if(x < 0 || x >= n || y < 0 || y >= m) return;
if(flag[x][y] > 0 || Map[x][y] != 'W') return;
flag[x][y] = idx;
for(int dx = -1;dx <= 1;dx++)
{
for(int dy = -1;dy <= 1;dy++)
{
if(dx != 0 || dy != 0) 
dfs(x + dx,y + dy,idx);
}
}
}
int main()
{
// freopen("lkcount.in","r",stdin);
// freopen("lkcount.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 0;i < n;i++)
{
scanf("%s",Map[i]);
}
int cnt = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
if(flag[i][j] == 0 && Map[i][j] == 'W')
dfs(i,j,++cnt);
}
}
printf("%d",cnt);
return 0;
}

猜你喜欢

转载自blog.csdn.net/chang_yl/article/details/79430863