题意:寻找连续的@,可以从八个方向寻找,简单的DFS。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int m, n;
int dx[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
int vis[101][101];
char s[101][101];
void init()
{
memset(s, 0, sizeof(s));
memset(vis, 0, sizeof(vis));
}
bool in(int x, int y)
{
return x >= 0 && y >= 0 && x < m && y < n;
}
void dfs(int x,int y)
{
vis[x][y] = 1;
for(int i = 0; i < 8; i++)
{
int xx = x + dx[i];
int yy = y + dy[i];
if(vis[xx][yy] == 0 &&in(xx, yy) && s[xx][yy] == '@')
{
dfs(xx,yy);
}
}
return;
}
int main()
{
while(cin >> m >> n )
{
if(m == 0 && n == 0)
break;
init();
for(int i = 0; i < m; i++)
cin >> s[i];
int ans = 0;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(s[i][j] == '@' && vis[i][j] == 0)
{
dfs(i, j);
ans++;
}
}
}
cout << ans << endl;
}
return 0;
}