#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N = 2010;
typedef pair<int, int> PII;
int n, m;
char g[N][N];
// int bfs(int sx, int sy)
// {
// queue<PII> q;
// q.push({sx, sy});
// g[sx][sy] = '#';
// int res = 0;
// int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
// while(q.size())
// {
// auto t = q.front();
// q.pop();
// res ++;
// for(int i = 0; i < 4; i ++)
// {
// int x = t.x + dx[i];
// int y = t.y + dy[i];
// if(x < 0 || x >= n || y < 0 || y >= m || g[x][y] != '.')
// continue; g[x][y] = '#'; q.push({x, y});
// }
// }
// return res;
// }
int dx[4] = {
-1, 0, 1, 0}, dy[4] = {
0, 1, 0, -1};
int dfs(int x, int y) {
int res = 1;
g[x][y] = '#';
for (int i = 0; i < 4; i++) {
int a = x + dx[i], b = y + dy[i];
if (a >= 0 && a < n && b >= 0 && b < m && g[a][b] == '.') {
res += dfs(a, b);
}
}
return res;
}
int main() {
while (cin >> m >> n, n || m) {
for (int i = 0; i < n; i++) cin >> g[i];
int x, y;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (g[i][j] == '@') {
x = i, y = j;
}
// cout << bfs(x, y) << endl;
cout << dfs(x, y) << endl;
}
}
dfs, bfs basic template (flood fill)
Guess you like
Origin blog.csdn.net/qq_47783181/article/details/112774164
Recommended
Ranking