Leetcodeインタビューの質問13.ロボットの可動範囲[単純検索BFSまたはDFS]

問題の説明

座標[0,0]から座標[m-1、n-1]まで、地上にm行n列のグリッドがあります。ロボットは座標[0,0]のグリッドから理解しやすく、一度に1つのグリッドを左、右、上、下に移動できます(グリッドの外に移動できません)。また、kより大きい行と列の座標の合計を入力できません。それぞれの。たとえば、kが18の場合、3 + 5 + 3 = 7 = 18であるため、ロボットは正方形[35,37]に入ることができます。ただし、3 + 5 + 3 + 8 = 19であるため、正方形[35,38]に入ることができません。ロボットが到達できるグリッドはいくつですか?

問題解決レポート

直接検索、BFSまたは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 10,000+ビュー

おすすめ

転載: blog.csdn.net/qq_27690765/article/details/105381659
おすすめ