LeetCode 剑指 Offer 13. 机器人的运动范围(深度遍历)

LeetCode 剑指 Offer 13. 机器人的运动范围

  • 原题
  • 思路
  • 代码
  • 运行截图
  • 收获

原题

LeetCode 剑指 Offer 13. 机器人的运动范围

思路

  • 通过深度遍历来找出所有可达的格子
  • 通过0、1、2来区分未遍历、可到达、不可到达三种状态

代码

class Solution {
public:
    int visited[109][109];
    int cnt = 0;
    int direction[4][2] ={
        {1,0},
        {-1,0},
        {0,1},
        {0,-1}
    };
    int numK, numM, numN;
    bool canVisited(int i, int j){
        int num = 0;
        while (i != 0){
            num += i%10;
            i /= 10;
        }
        while (j != 0){
            num += j%10;
            j /= 10;
        }
        if (num <= numK) return true;
        return false;
    }
    void traverse(int i, int j){
        if (!canVisited(i, j)){
            visited[i][j] = 2;
            return;
        } 
        visited[i][j] = 1;
        cnt++;
        for (int t = 0; t < 4; t++){
            int newi = i + direction[t][0];
            int newj = j + direction[t][1];
            if (newi >= 0 && newi < numM && newj >= 0 && newj < numN && visited[newi][newj] == 0) traverse(newi, newj); 
        }
    }
    int movingCount(int m, int n, int k) {
        numK = k; numM = m; numN = n;
        traverse(0, 0);
        return cnt;
    }
};

运行截图

在这里插入图片描述

收获

你可能感兴趣的:(leetcode,机器人,算法)