后端 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;
}