简单dfs 附上代码,很容易看出原理
#include <iostream>
using namespace std;
char map[110][110];
int xx[]={0,0,-1,1,-1,-1,1,1};
int yy[]={-1,1,0,0,-1,1,-1,1};
int n,m;
bool ok(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m;
}
void dfs(int x,int y)
{
map[x][y]='*';
for(int i=0;i<8;i++)
{
int tx=x+xx[i];
int ty=y+yy[i];
if(ok(tx,ty)&&map[tx][ty]=='@')
{
dfs(tx,ty);
}
}
}
int main()
{
while(cin>>n>>m&&n)
{
int cnt=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>map[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(map[i][j]=='@')
{
dfs(i,j);
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}