知识点:深搜
本题有个坑点,那么就是先输入的是列数,然后才是行数,其它的没有了
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int n, m, vis[N][N], cnt;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
string s[N];
void dfs(int x, int y) {
cnt++;
for (int i = 0; i < 4; i++) {
int x1 = x + dx[i];
int y1 = y + dy[i];
if (x1 < 1 || x1 > n || y1 < 1 || y1 > m) continue;
if (vis[x1][y1] || s[x1][y1] == '#') continue;
vis[x1][y1] = 1;
dfs(x1, y1);
}
}
int main() {
while (cin >> m >> n && n) {
int x, y;
for (int i = 1; i <= n; i++) {
cin >> s[i];
s[i] = " " + s[i];
for (int j = 1; j <= m; j++) {
if (s[i][j] == '@') { x = i; y = j; s[i][j] = '.'; }
}
}
cnt = 0;
memset(vis, 0, sizeof(vis));
vis[x][y] = 1;
dfs(x, y);
cout << cnt << endl;
}
return 0;
}