机器人的运动范围

题目描述

地上有一个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);

猜你喜欢

转载自www.cnblogs.com/Lune-Qiu/p/8921445.html