#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #define x first #define y second usingnamespace std; constint N = 25; char g[N][N]; int n, m; typedef pair<int, int> PII; int dx[] {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
intbfs(int sx, int sy){ int res = 0; queue<PII> q; q.push({sx, sy});//压入第一个元素; g[sx][sy] = '#'; while (! q.empty()) { PII t = q.front();//取队列元素 res++; q.pop(); for (int i = 0; i < 4; i++) { int x = dx[i] + t.x; int y = dy[i] + t.y; if (x < 0 || x >= n || y < 0 || y >= m || g[x][y] != '.') continue; g[x][y] = '#'; q.push({x, y}); } } return res; }
intmain(){ while (cin >> m >> n, m || n) {//注意先输入行数; 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; } return0; }
#include<cstdio> #include<iostream> #include<algorithm> usingnamespace std; constint N = 25; char g[N][N]; int n, m; int dx[] {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
intdfs(int sx, int sy){ int res = 1;//表示当前格子可以搜索; g[sx][sy] = '#'; for (int i = 0; i < 4; i++) { int x = sx + dx[i]; int y = sy + dy[i]; if (x < n && x >= 0 && y <m && y >= 0 && g[x][y] == '.') { res += dfs(x, y);//加可以搜索的格子数; } } return res; }
intmain(){ while (cin >> m >> n, m || n) {//注意先输入行数; 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 << dfs(x, y) << endl; } return0; }