题目大意:统计有多少个'W'连通块;
代码:
#include <iostream>
#include <string.h>
using namespace std;
int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int vis[101][101];
char map[101][101];
int n,m;
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(tx>=0&&tx<n&&ty>=0&&ty<m&&map[tx][ty]=='W'&&!vis[tx][ty])
{
vis[tx][ty]=1;
dfs(tx,ty);
}
}
}
int main()
{
// int n,m;
while(cin>>n>>m)
{ memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cin>>map[i][j];
}
int cnt=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(map[i][j]=='W'&&!vis[i][j])
{ cnt++;
vis[i][j]=1;
dfs(i,j);
}
}
}
cout<<cnt<<endl;
}
return 0;
}