题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
class Solution {
public:
int movingCount(int threshold, int rows, int cols)
{
if(threshold<1||rows<1||cols<1)
{
return 0;
}
inq = new int[rows*cols];
fill(inq, inq + rows * cols, 0);
inq[0] = 1;
return DFS(threshold, rows, cols, 0, 0);
}
private:
int mymove[4][2] = { { -1,0 },{ 1,0 },{ 0,-1 },{ 0,1 } };
int *inq;
int coor_sum(int x, int y)
{
int sum = 0;
while (x>0)
{
sum += x % 10;
x /= 10;
}
while (y>0)
{
sum += y % 10;
y /= 10;
}
return sum;
}
int DFS(int thr, int rows, int cols, int x, int y)
{
int count = 1;
for (int i = 0; i<4; i++)
{
int x_new = x + mymove[i][0];
int y_new = y + mymove[i][1];
if (x_new <0 || x_new >= rows || y_new < 0 || y_new >= cols)
{
}
else
{
cout << x_new << " " << y_new << endl;
if (inq[x_new*cols + y_new] == 0 && coor_sum(x_new, y_new) <= thr)
{
inq[x_new*cols + y_new] = 1;
count += DFS(thr, rows, cols, x_new, y_new);
}
}
}
return count;
}
};