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

    题目描述

    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
    我的代码:
     1 class Solution {
     2 public:
     3     int Bsum(int num)
     4     {
     5         int sum = 0;
     6         while(num)
     7         {
     8             sum += num%10; 
     9             num = num/10; 
    10         }
    11         return sum;
    12     }
    13     int movingCount(int threshold, int rows, int cols)
    14     {
    15         int *matrix = new int[rows*cols];
    16         for(int i = 0; i < rows*cols; i++)//初始化
    17                 matrix[i] = 0;
    18         return Count(threshold,matrix,rows,cols,0,0);
    19     }
    20     int Count(int threshold,int* matrix, int rows, int cols,int i, int j)
    21     {
    22         int sum = 0;
    23         if(i >= 0&& j >= 0 && i < rows &&j < cols
    24            &&  Bsum(i)+Bsum(j) <= threshold && matrix[i*cols+j] == 0 )
    25         {
    26             matrix[i*cols+j] = 1;
    27             sum =1+ Count(threshold,matrix,rows,cols,i+1,j)+
    28             Count(threshold,matrix,rows,cols,i,j+1)+
    29             Count(threshold,matrix,rows,cols,i,j-1)+
    30             Count(threshold,matrix,rows,cols,i-1,j);
    31         }
    32         return sum;
    33     }
    34 };

    刚开始的思路是不对的,认为是从0,0出发,只能走一条路,最长为多少

    正确的是:能走到的范围最多是多少,可以任意走,所以用暴力也可以

    代码思路:就是一直找,标记一下走过的点

    找bug找了好久,找到错误想把自己打死,cols和rows写反了

    初始化也可以用memset(matrix,0,sizeof(),matrix*rows*cols);

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8921445.html
Copyright © 2011-2022 走看看