

代码
- #include <iostream>
- #include <bits/stdc++.h>
- #define ull unsigned long long
-
- using namespace std;
-
- int G[200][200];
- int visited[200][200];
-
- int res = 1;
-
- void dfs(int x, int y) {
- int step = 0;
- int inc = 0;
- int i = x;
- while(!G[i+1][y]) {
- i++;
- if(!visited[i][y]) {
- inc++;
- visited[i][y] = 1;
- }
- }
- if(inc) {
- res += inc;
- dfs(i, y);
- }
- i = x;
- inc = 0;
- while(!G[i-1][y]) {
- i--;
- if(!visited[i][y]) {
- inc++;
- visited[i][y] = 1;
- }
- }
- if(inc) {
- res += inc;
- dfs(i, y);
- }
- i = y;
- inc = 0;
- while(!G[x][i+1]) {
- i++;
- if(!visited[x][i]) {
- inc++;
- visited[x][i] = 1;
- }
- }
- if(inc) {
- res += inc;
- dfs(x, i);
- }
- i = y;
- inc = 0;
- while(!G[x][i-1]) {
- i--;
- if(!visited[x][i]) {
- inc++;
- visited[x][i] = 1;
- }
- }
- if(inc) {
- res += inc;
- dfs(x, i);
- }
- }
-
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- int n, m;
- cin >> n >> m;
- for(int i = 0; i < n; i++) {
- for(int j = 0; j < m; j++) {
- char c;
- cin >> c;
- if(c == '#') {
- G[i][j] = 1;
- }
- }
- }
- visited[1][1] = 1;
- dfs(1, 1);
- cout << res << '\n';
- return 0;
- }