算法
(搜索)
只需搜索出靠近 $(x, y)$ 这点的第 $x$ 行 和 第 $y$ 行上的无障碍网格数即可。
C++ 代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using std::cin;
using std::cout;
using std::string;
using std::vector;
int di[] = {-1, 0, 1, 0};
int dj[] = {0, -1, 0, 1};
int main() {
int h, w, x, y;
cin >> h >> w >> x >> y;
--x; --y;
vector<string> s(h);
rep(i, h) cin >> s[i];
int ans = 1;
rep(v, 4) {
int cnt = 0;
int ni = x, nj = y;
while (1) {
ni += di[v];
nj += dj[v];
if (ni < 0 or nj < 0 or ni >= h or nj >= w) break;
if (s[ni][nj] == '#') break;
++ans;
}
}
cout << ans << '\n';
return 0;
}