题意:求联通块的个数,8个方向的联通都算
题解:DFS求
#include<bits/stdc++.h>
using namespace std;
int n,m;
char s[130];
bool a[130][130],vis[130][130];
const int movx[8]={-1,-1,-1, 0,0,1,1,1};
const int movy[8]={-1, 0, 1,-1,1,-1,0,1};
void dfs(int x,int y)
{
vis[x][y]=true;
for (int i=0;i<8;i++)
{
int tx=x+movx[i],ty=y+movy[i];
if (a[tx][ty]&&!vis[tx][ty])
dfs(tx,ty);
}
}
void Gao()
{
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
for (int i=0;i<n;i++)
{
scanf("%s",s);
for (int j=0;j<m;j++)
{
if (s[j]=='@')
a[i+1][j+1]=1;
else
a[i+1][j+1]=0;
}
}
int ans=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
if (!vis[i][j]&&a[i][j]==1)
ans++,dfs(i,j);
}
cout<<ans<<endl;
}
int main()
{
while(cin>>n>>m &&n)
Gao();
return 0;
}