水题,注意题中的"adjacent"包括对角
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
const int maxn = 101;
const int addx[] = {-1,1,0,0,-1,-1,1,1};
const int addy[] = {0,0,-1,1,-1,1,-1,1};
char s[maxn][maxn];
int m,n,i,j,ans;
void dfs(int x,int y)
{
s[x][y] = '*';
for(int i=0;i<8;i++) //向8个方向遍历
{
int dx,dy;
dx = x + addx[i];
dy = y + addy[i];
if(dx>=0&&dx<m&&dy>=0&&dy<n&&s[dx][dy]=='@')
dfs(dx,dy);
}
}
int main()
{
while(cin>>m>>n&&m&&n)
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>s[i][j];
ans = 0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(s[i][j]=='@')
{
dfs(i,j);
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}