后端 b卷 无人机
int func(vector<vector<int>> block) {
int n = block.size(), m = block[0].size();
int ans = 0;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右 下 左 上
vector<vector<bool>> st(n, vector(m, false));
function<bool(int, int, int)> dfs = [&](int x, int y, int dir) {
if(x < 0 || x >= n || y < 0 || y >= m || block[x][y] == 1)
return false;
if(st[x][y]) {
return true;
} else {
++ ans;
}
st[x][y] = true;
for(int k = 0; k < 4; ++ k) {
int i = x + d[(dir + k) % 4][0], y = x + d[(dir + k) % 4][1];
if(dfs(i, j, (dir + k) % 4)) {
return true;
}
}
return true;
};
dfs(0, 0, 0);
return ans;
}