剑指offer-机器人的运动范围

原创 2018年04月16日 19:57:14

题目
地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?
思路
回溯法,走出一步,就看能不能走四周的格子。
代码

int MovingCount(int treshold,int rows,int cols)
{
    if(treshold<0||rows<0||cols<0)
    {
        return 0;
    }
    int*visited=new int[rows*cols];
    for(int i=0;i<rows*cols;i++)
        visited[i]=0;
    int row=0;
    int col=0;
    int count=MovingCountCore(treshold,rows,cols,row,col,visited);
    delete[]visited;
    return count;
}
int MovingCountCore(int treshold,int rows,int cols,int row,int col,int*visited)
{
    int count=0;
    if(check(treshold,rows,cols,row,col,visited))

    {
        visited[row*cols+col]=1;
        count=1+MovingCountCore(treshold,rows-1,cols,row,col,visited)+
        MovingCountCore(treshold,rows,cols,row,col-1,visited)+
        MovingCountCore(treshold,rows,cols,row+1,col,visited)+
        MovingCountCore(treshold,rows,cols,row,col+1,visited);
    }
}
bool check(int treshold,int rows,int cols,int row,int col,int*visited)
{
    int rownum=getdigit(row);
    int colnum=getdigit(col);
    if(treshold>=(rownum+colnum)&&row>=0&&row<rows&&col>=0&&col<cols&&!visited[row*cols+col])
        return true;
    else
         return false;
}
int getdigit(int k)
{
    int sum=0;
    while(!k)
    {
        sum+=(k%10);
        k=k/10
    }
    return sum;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gary_god/article/details/79965470

【剑指Offer学习】【面试题67:机器人的运动范围】

题目:地上有个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。举例分析  例如,当k为18时,机器人能够...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-15 07:21:40
  • 3220

《剑指offer》:[67]机器人的运动范围

题目:地上有个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(...
  • gogoky
  • gogoky
  • 2016-06-30 11:06:30
  • 1720

《剑指Offer》学习笔记--面试题67:机器人的运动范围

题目:地上有个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(3...
  • zhouwei1221q
  • zhouwei1221q
  • 2015-05-19 14:14:40
  • 477

剑指Offer面试题67:机器人的运动范围 Java实现

题目:机器人的运动范围           地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左,向右,向上,向下移动一格,但不能进入行坐标和列坐标的位数之和大于k...
  • gg543012991
  • gg543012991
  • 2016-10-23 10:13:32
  • 743

剑指Offer--039-二叉树的深度

链接 牛客OJ:二叉树的深度 九度OJ:http://ac.jobdu.com/problem.php?pid=1350 GitHub代码: 039-二叉树的深度 C...
  • gatieme
  • gatieme
  • 2016-05-07 20:39:04
  • 1366

【剑指offer】二叉树的深度

题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 方法一分析:主要思想就是层序遍历,就是有遍历上一层的每一个节点,得到下...
  • cdwxx1234
  • cdwxx1234
  • 2017-07-15 14:27:07
  • 180

牛客网剑指offer-机器人的运动范围

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进...
  • yhn19951008
  • yhn19951008
  • 2018-03-04 16:51:59
  • 11

【day-9】剑指Offer-机器人的运动范围

换一个风格~
  • qq_34864421
  • qq_34864421
  • 2017-04-05 15:39:02
  • 140

牛客网刷题--剑指offer(两个栈实现队列)

牛客网给出的题目要求是用两个栈数据结构实现一个队列的push和pop操作。 两个栈实现队列这是很好理解的。因为栈的特性是后进先出(LIFO),而队列的特性是先进先出(FIFO),那两个栈连在一块儿,...
  • liu_sheng_1991
  • liu_sheng_1991
  • 2016-06-29 17:56:24
  • 439

剑指 机器人的运动范围

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格...
  • qq_35583113
  • qq_35583113
  • 2018-03-22 19:46:02
  • 5
收藏助手
不良信息举报
您举报文章:剑指offer-机器人的运动范围
举报原因:
原因补充:

(最多只允许输入30个字)