zoukankan      html  css  js  c++  java
  • 机器人的运动范围

    题目描述

    地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。

    一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。

    但是不能进入行坐标和列坐标的数位之和大于 k的格子。

    请问该机器人能够达到多少个格子?


    样例1

    输入:k=7, m=4, n=5

    输出:20

    样例2

    输入:k=18, m=40, n=40

    输出:1484

    解释:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。

       但是,它不能进入方格(35,38),因为3+5+3+8 = 19。

    注意:

        1. 0<=m<=50
        2. 0<=n<=50
        3. 0<=k<=100

    思路

      dfs,遇到一个能进入的方格ans就加1,然后判断它周围四个方向的格子能不能进入、之前有没有访问过,从而判断是否要进入并继续dfs,若它四个方向都不可行,那么就return,最后输出ans即可.

    ※温馨提示

      1. 当m=0或n=0时,ans=0;

      2. 若没有可行路径能到达格子p,那即便p的位数和小于k也没用,是到大不了的(一开始没注意到这点,所以直接二层循环,就错了QAQ);

     1 class Solution {
     2 public:
     3     int d[4][2]={{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
     4     bool vis[55][55];
     5     int ans=0;
     6     
     7     void dfs(int k, int m, int n, int x, int y) {
     8         int xx=x, yy=y, sum=0;
     9         while(xx) {
    10             sum+=xx%10;
    11             xx/=10;
    12         }
    13         while(yy) {
    14             sum+=yy%10;
    15             yy/=10;
    16         }
    17         if(sum<=k) {
    18             ans++;
    19             vis[x][y]=true;
    20             for(int i=0; i<4; i++) {
    21                 int dx=x+d[i][0];
    22                 int dy=y+d[i][1];
    23                 if(dx>=0 && dx<m && dy>=0 && dy<n && !vis[dx][dy]) dfs(k, m, n, dx, dy);
    24             }
    25         }
    26         return;
    27     }
    28     
    29     int movingCount(int threshold, int rows, int cols)
    30     {
    31         if(rows>0 && cols>0)
    32             dfs(threshold, rows, cols, 0, 0);
    33         return ans;
    34     }
    35 };
  • 相关阅读:
    如何查找YUM安装的JAVA_HOME环境变量详解
    Linux下设置和查看环境变量
    jar包部署脚本
    CentOS7开启防火墙及特定端口
    nohup 命令(设置后台进程): appending output to ‘nohup.out’ 问题
    重点|183道Java面试题可以说很详细了
    JVM性能调优
    【Notepad++】notepad++主题和字体设置(非常好看舒服的)
    spring-boot-maven-plugin 安装本地jar 包
    UserAgentUtils 获取浏览器信息
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/13664203.html
Copyright © 2011-2022 走看看