LeetCode 2061. 扫地机器人清扫过的空间个数**
具体思路:模拟+方向记录,自己确实没想到;不能用dfs,否则会重复记录;具体代码:class Solution {public://右 下 左 上int numberOfCleanRooms(vector<vector<int>>& room) {int ans = 0, m = room.size(),n = room[0].size();int dir[4][2
·
具体思路:
模拟+方向记录,自己确实没想到;
不能用dfs,否则会重复记录;
具体代码:
class Solution {
public:
//右 下 左 上
int numberOfCleanRooms(vector<vector<int>>& room) {
int ans = 0, m = room.size(),n = room[0].size();
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
//在某个空间的方向需要记录 一下
vector<vector<bool>>vis(m,vector<bool>(n,false));
//在某个位置的方向记录一下
vector<vector<vector<bool>>>pos(m,vector<vector<bool>>(n,vector<bool>(4,false)));
int cur_dir = 0,cur_x = 0,cur_y = 0;
while(true) {
while(cur_x >= 0 && cur_x < m && cur_y >= 0 && cur_y < n && room[cur_x][cur_y] == 0) {
// cout<<cur_x<<" "<<cur_y<<" "<<cur_dir<<endl;
if(pos[cur_x][cur_y][cur_dir])return ans;
pos[cur_x][cur_y][cur_dir] = true;
if(!vis[cur_x][cur_y]) {
ans ++;
vis[cur_x][cur_y] = true;
}
cur_x += dir[cur_dir][0];
cur_y += dir[cur_dir][1];
}
cur_x -= dir[cur_dir][0];
cur_y -= dir[cur_dir][1];
cur_dir = (cur_dir + 1) % 4;
}
}
};
更多推荐
所有评论(0)