关闭

剑指Offer——机器人的运动范围

107人阅读 评论(0) 收藏 举报
题目描述:地上有m行n列的方格,机器人从(0,0)开始,每次可以向上、下、左、右移动一步,

                   但不能进入行坐标和列坐标的数位之和大于K的方格。请问该机器人可以到达多少个格子。

//得到一个数字的数位之后
int getDigitSum(int num)
{
   int sum=0;

   while(num>0)
   {
       sum+=num%10;
       num=num/10;
   }
   return sum;
}

//检验某个方格是否可入
bool check(int threshold,int rows,int cols,int row,int col,bool* visited)
{
  if(row>=0&&row<rows&&col>=0&&col<cols&&getDigitSum(row)+getDigitSum(col)<=threshold&&!visited[row*cols+col])
        return true;
  return false;
}

int movingCountCore(int threshold,int rows,int cols,int row,int col,bool* visited)
{
    int countnum=0;
    if(check(threshold,rows,cols,row,col,visited))
    {
        visited[row*cols+col]=true;
        countnum=1+movingCountCore(threshold,rows,cols,row+1,col,visited)
                  +movingCountCore(threshold,rows,cols,row-1,col,visited)
                  +movingCountCore(threshold,rows,cols,row,col+1,visited)
                  +movingCountCore(threshold,rows,cols,row,col-1,visited);

    }
    return countnum;
}
int movingCount(int threshold,int rows,int cols)
{
    bool *visited=new bool[rows*cols];
    for(int i=0;i<rows*cols;++i)
        visited[i]=false;

    int countn=movingCountCore(threshold,rows,cols,0,0,visited);
    delete[] visited;

    return countn;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30261次
    • 积分:1340
    • 等级:
    • 排名:千里之外
    • 原创:106篇
    • 转载:12篇
    • 译文:1篇
    • 评论:3条
    文章分类
    最新评论