Leetcode 面试题13.机器人的运动范围【简单的搜索 BFS or DFS】

问题描述

地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1]。一个机器人从坐标[0,0]的格子开始易懂,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标之和大于k的各自。例如,当k为18时,机器人能够进入方格[35,37],因为3+5+3=7=18。但它不能进入方格[35,38],因为3+5+3+8=19。请问该机器人能够到达多少个格子。

解题报告

直接搜索即可,BFS or DFS

实现代码

class Solution {
public:
    int sum(int x){
        int ans=0;
        while(x){
            ans+=(x%10);
            x=x/10;
        }
        return ans;
    }
    int movingCount(int m, int n, int k) {
        int ans=0,qnum,ox,oy,nx,ny;
        int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
        vector<bool>vis(m*n,false); 
        queue<int>q;
        q.push(0);
        vis[0]=true;
        while(!q.empty()){
            qnum=q.front();
            q.pop();
            ans++;
            ox=qnum/n;
            oy=qnum%n;
            for(int index=0;index<4;index++){
                nx=ox+dx[index];
                ny=oy+dy[index];
                if(nx>=0&&nx<m&&ny>=0&&ny<n&&!vis[n*nx+ny]&&
                			sum(nx)+sum(ny)<=k){
                    q.push(n*nx+ny);
                    vis[n*nx+ny]=true;
                }
            }
        }
        return ans;
    }
};

参考资料

[1] Leetcode 面试题13. 机器人的运动范围

MD_
发布了139 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_27690765/article/details/105381659