题意:和counting sheep一样,只是这里要搜索八个方向。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int m, n;
char a[105][105];
int vis[105][105];
void dfs(int r, int c, int index)
{
if (r < 0 || r >= m || c < 0 || c >= n || vis[r][c] || a[r][c] != '@')
return;
vis[r][c] = index;
for (int i = -1;i < 2;i++)
for (int j = -1;j < 2;j++)
if (i || j)
dfs(r + i, c + j, index);
}
int main()
{
while (cin >> m && m != 0)
{
cin >> n;
for (int i = 0;i < m;i++)
for (int j = 0;j < n;j++)
cin >> a[i][j];
memset(vis, 0, sizeof(vis));
int cnt = 0;
for (int i = 0;i < m;i++)
for (int j = 0;j < n;j++)
if (!vis[i][j] && a[i][j] == '@')
dfs(i, j, ++cnt);
cout << cnt << endl;
}
return 0;
}