面试题目67(机器人的运动范围)

来源:互联网 发布:移动互联网最新数据 编辑:程序博客网 时间:2024/05/15 05:34

题目:地上有一个M行N列的方格,一个机器人从坐标(0,0)的格子开始移动,它每一次可以向上下左右移动一格

,但不能进入行坐标和列坐标的数位之和大于k的格子,例如当k为18时,机器人能够进入方格(35,37),因为3+5+7+3=18

#include<iostream>using namespace std;int getdigitsum(int number){int sum=0;while(number>0){sum+=number%10;number/=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 movingcount_core(int threshold,int rows,int cols,int row,int col,bool *visited){int count=0;if(check(threshold,rows,cols,row,col,visited)){visited[row*cols+col]=true;count=1+movingcount_core(threshold,rows,cols,row,col-1,visited)+movingcount_core(threshold,rows,cols,row,col+1,visited)+movingcount_core(threshold,rows,cols,row-1,col,visited)+movingcount_core(threshold,rows,cols,row+1,col,visited);}return count;}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 count=movingcount_core(threshold,rows,cols,0,0,visited);delete [] visited;return count;}int main(){int count=movingcount(4,4,4);cout<<count<<endl;system("pause");return 0;}


1 0
原创粉丝点击