题解 | #机器人的运动范围#

机器人的运动范围

https://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8

#include <vector>
class Solution {
public:
    int res=0;
    int vis[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//上下左右
    bool iscoming(int row,int col,int threshold){
        int a,b,c,sum;
        a=row/100;
        b=(row-a*100)/10;
        c=(row-a*100-b*10)%10;
        sum=a+b+c;
        a=col/100;
        b=(col-a*100)/10;
        c=(col-a*100-b*10)%10;
        sum+=a+b+c;
        if(sum>threshold) return false;
        return true;
    }
    void backtracking(int threshold, int rows, int cols,vector<vector<bool>>& flag,int r,int c){
        if(r<0||r>=rows||c<0||c>=cols||!iscoming(r,c,threshold)||flag[r][c]){
            return ;
        }
        res++;
        flag[r][c]=true;
        for(int i=0;i<4;i++){
            backtracking(threshold, rows, cols,flag, r+vis[i][0], c+vis[i][1]);
        }
    }
    int movingCount(int threshold, int rows, int cols) {
        if(threshold<=0) return 1;
        vector<vector<bool>> flag(rows,vector<bool>(cols,false));
        backtracking(threshold, rows, cols,flag,0,0);
        return res;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务