C++--机器人的运动范围

目录

[1. 题目](#1. 题目)

[2. 思路](#2. 思路)

[3. C++代码测试](#3. C++代码测试)

[4. 测试结果](#4. 测试结果)


1. 题目

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

2. 思路

这道题类似走迷宫,我们可以先用矩阵全部存储false,代表没有走过

编写计算一个数的各数位和的函数

对于任意一点,我们需要对它,它的上下左右,一共5个点进行判断,每遍历一个点,则该false为ture

按照上述一条要求,编写判断一点及其周围满足条件的点数量

利用递归,计算总数

这里为了计算更加简单,把二维数组改写成一位数组进行计算

每个点是否满足条件的判断:点必须在该矩阵中,各数位和小于规定值,每个点代表的值为false,也就是没有遍历过

3. C++代码测试

cpp 复制代码
#include<iostream>
using namespace std;

//计算各数位的和
int sum(int n)
{
int result=0;
while(n)
{
result+=n%10;
n=n/10;
}
return result;
}

//计算一个点及四周满足条件的点数量
int moving(int threshold,int rows,int cols,int m,int n,bool *flag)
{
int count=0;
if(m>=0&&m<rows&&n>=0&&n<cols&&sum(m)+sum(n)<=threshold&&flag[m*cols+n]==false)
{
flag[m*cols+n]=true;
count=1+moving(threshold,rows,cols,m-1,n,flag)+moving(threshold,rows,cols,m+1,n,flag)+moving(threshold,rows,cols,m,n-1,flag)+moving(threshold,rows,cols,m,n+1,flag);
}

return count;



}

//计算二维数组中满足条件的总点数
int movingCount(int threshold, int rows, int cols)
    {
       bool *flag=new bool[rows*cols];
	   for (int i=0;i<rows*cols;i++)
		   flag[i]=false;
	   int count=moving(threshold,rows,cols,0,0,flag);
	   return count;
    }


int main()
{
	//测试代码
cout<<movingCount(18,100,100);

return 0;
}

4. 测试结果

相关推荐
a诠释淡然2 小时前
C++模板元编程—现代C++的黑魔法
开发语言·c++
汉克老师2 小时前
GESP2026年3月认证C++六级真题与解析(单选题1-8)
c++·多态··构造函数·循环队列·bst·gesp6级
charlie1145141912 小时前
现代C++工程:constexpr 基础:编译期求值的艺术
开发语言·c++
MemoriKu2 小时前
Flutter 相册 APP 视频模态稳定化实战:从视频抽帧、Embedding 元数据到 Android 真机启动修复
android·开发语言·前端·flutter·架构·音视频·embedding
小欣加油2 小时前
leetcode121买卖股票的最佳时机
数据结构·c++·算法·leetcode·职场和发展
SilentSamsara2 小时前
特征工程系统方法论:编码、分箱、交互特征与特征选择
开发语言·人工智能·python·机器学习·青少年编程·信息可视化·pandas
morning_judger2 小时前
Agent开发系列(十)-知识库建设(架构总览)
开发语言·人工智能
ch.ju2 小时前
Java程序设计(第3版)第四章——继承的特点
java·开发语言
geovindu2 小时前
python:Coroutines Pattern
开发语言·python·设计模式·协程模式
A.说学逗唱的Coke3 小时前
【运维专题】playbooks保姆级使用指南
运维·开发语言·python