#include<iostream>
#include<vector>
using namespace std;
int getsum(int number)//将个位十位加起来
{
int sum = 0;
while(number>0)
{
sum+=number%10;
number = number/10;
}
return sum;
}
int movingcountcore(int i,int j,int m,int n,int k,vector<vector<int>> &vec)
{
if(i<0 || j<0 || i>=m || j>=n || getsum(i)+getsum(j)>k ||vec[i][j] == 1)
{
return 0;
}
vec[i][j] = 1;
//向左,向右、向下、向上走
return movingcountcore(i+1,j,m,n,k,vec)+movingcountcore(i,j+1,m,n,k,vec)+movingcountcore(i,j-1,m,n,k,vec)+movingcountcore(i-1,j,m,n,k,vec)+1;
}
int movingcount(int m,int n,int k)
{
//定义一个二维矩阵标记是否走过
vector<vector<int>> vec(m,vector<int>(n,0));
//flag = 0;
return movingcountcore(0,0,m,n,k,vec);
}
int main()
{
int m,n,k;
while(cin>>m>>n>>k)
{
int result = movingcount(m,n,k);
cout<<result<<endl;
}
return 0;
}
学习笔记:机器人运动范围(回溯法)
最新推荐文章于 2020-04-21 09:45:37 发布