最简单的板子题,摸清dfs套路就好,不用剪枝,不用优化,dfs的模板在我博客的搜索模块里找。
#include <iostream>
#include <cstring>
#include <ctime>
using namespace std;
const int maxn = 105;
int ans;
int n, m;
char Map[maxn][maxn];
int a[] = {1, -1, 0, 0, 1, 1, -1, -1};
int b[] = {0, 0, 1, -1, 1, -1, 1, -1};
void dfs(int x, int y)
{
Map[x][y] = '*';
for (int i = 0; i < 8; i++) {
int xx = x+a[i];
int yy = y+b[i];
if (xx >= 0 && xx < n && yy >= 0 && yy < m && Map[xx][yy] == '@') dfs(xx, yy);
}
}
int main()
{
ios::sync_with_stdio(false);
while (cin >> n >> m) {
if (!n && !m) break;
for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> Map[i][j];
ans = 0;
for (int i = 0;i < n; i++) {
for (int j = 0; j < m; j++) {
if (Map[i][j] == '@') {ans++; dfs(i, j);}
}
}
cout << ans << endl;
}
return 0;
}