#include <bits/stdc++.h>
const int maxn = 105;
char maps[maxn][maxn];
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int w, h;
int cnt;
bool in(int x, int y) {
return x >= 0 && x < h && y >= 0 && y < w;
}
void dfs(int x, int y) {
if(!in(x, y))
return;
if(maps[x][y] == '#') //不能扩展
return;
cnt++;
maps[x][y] = '#';//floodfill
for(int i = 0; i < 4; i++) {
int xx = x + dx[i];
int yy = y + dy[i];
if(in(xx, yy) && maps[xx][yy] == '.') {
//cnt++;
dfs(xx, yy);
}
}
}
int main() {
//freopen("data.in", "r", stdin);
while(scanf("%d %d", &w, &h) == 2 && w && h) {
for(int i = 0; i < h; ++i) {
scanf("%s", maps[i]);
}
cnt = 0;
for(int i = 0; i < h; ++i) {
for(int j = 0; j < w; j++) {
if(maps[i][j] == '@') {
dfs(i, j);
//cnt++;
}
}
}
printf("%d\n", cnt);
}
return 0;
}
HDU 1312 Red and Black(DFS)
最新推荐文章于 2018-06-28 13:44:20 发布