1818:红与黑
题目链接http://noi.openjudge.cn/ch0205/1818/
#include<iostream>
#include<cstring>
using namespace std;
char a[25][25];
bool vis[25][25] = {
0 };
int maxx = 0;
int w, h;
bool fw(int x, int y) {
if (x >= 1 && x <= h && y >= 1 && y <= w)
return true;
return false;
}
void dfs(int x, int y) {
vis[x][y] = 1;
maxx++;
if (fw(x-1,y)&&a[x - 1][y] == '.' && vis[x - 1][y] == 0) {
dfs(x - 1, y);
}
if (fw(x + 1, y) && a[x + 1][y] == '.' && vis[x + 1][y] == 0) {
dfs(x + 1, y);
}
if (fw(x , y - 1) && a[x ][y-1] == '.' && vis[x ][y - 1] == 0) {
dfs(x , y - 1);
}
if (fw(x , y+1) && a[x ][y+1] == '.' && vis[x ][y+1] == 0) {
dfs(x , y+1);
}
}
int main() {
while (cin >> w >> h) {
if (w == 0 && h == 0)
break;
int x, y;
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
cin >> a[i][j];
if (a[i][j] == '@')
{
x = i, y = j;
}
}
}
maxx = 0;
memset(vis, 0, sizeof(vis));
dfs(x, y);
cout << maxx << endl;
}
return 0;
}