#include <bits/stdc++.h>
const int maxn = 105;
char oils[maxn][maxn];
int dx[8] = {-1,-1,0,1,1,1,0,-1};
int dy[8] = {0,1,1,1,0,-1,-1,-1};
int n, m;
bool in(int x, int y) {
return x >= 0 && x < m && y >= 0 && y < n;
}
void dfs(int x, int y) {
if(!in(x, y))
return;
if(oils[x][y] != '@') //不是oil退出
return;
oils[x][y] = '*';//floodfill
for(int i = 0; i < 8; i++) {
int xx = x + dx[i];
int yy = y + dy[i];
if(in(xx, yy) && oils[xx][yy] == '@')//important,只有是合法的状态,才有扩展的必要
dfs(xx, yy);
}
}
int main() {
//freopen("data.in", "r", stdin);
while(scanf("%d %d", &m, &n) == 2 && m && n) {
for(int i = 0; i < m; ++i) {
scanf("%s", oils[i]);
}
int cnt = 0;
for(int i = 0; i < m; ++i) {
for(int j = 0; j < n; j++) {
if(oils[i][j] == '@') {
dfs(i, j);
cnt++;
}
}
}
printf("%d\n", cnt);
}
return 0;
}
HDU 1241 Oil Deposits(DFS)
最新推荐文章于 2018-06-28 13:44:20 发布