机器人的运动范围-----数据结构

【LeetCode】Day212-机器人的运动范围 面试题13. 机器人的运动范围【中等】-DFS、BFS、矩阵 阅读详情

题目:

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

测试用例:

        1.格子全部都在范围内;

        2.格子中的部分在范围内;

        3.特殊输入(格子都不在范围内,k为负数)

解题思路:

        机器人从坐标(0,0)开始移动。当它进入坐标(i,j)的矩阵时,通过检测(check)坐标的位数和来判断机器人是否能够进入。如果机器人能够进入坐标为(i,j)的格子,则继续判断是否能够进入与之相连的4个格子(i,j-1)、(i,j+1)、(i-1,j)和(i+1,j)。因此,我们可以使用回溯算法来进行计算。

程序代码:

moving.c:

//moving.c
#include "moving.h"
//运动函数
int GetDigitSum(int number){
    int sum = 0;
    while(number>0){
        sum += number%10;
        number /= 10;
    }
    return sum;
}
int check(int threshold,int rows,int cols,int row,int col,int * visited){
    if(row>=0 && row<rows && col>=0 && col<cols && GetDigitSum(row)+GetDigitSum(col)<= threshold && (visited[row*cols+col] == 0)){
        return 1;
    }
    return 0;
}
int movingCountCore(int threshold,int rows,int cols,int row,int col,int* visited){
    int count = 0;
    if(check(threshold,rows,cols,row,col,visited)){
        visited[row*cols+col] = 1;
        count = 1+ movingCountCore(threshold,rows,cols,row-1,col,visited)\
                +movingCountCore(threshold,rows,cols,row,col-1,visited)\
                +movingCountCore(threshold,rows,cols,row+1,col,visited)\
                +movingCountCore(threshold,rows,cols,row,col+1,visited);
    }
    return count;
}
int movingCount(int threshold,int rows,int cols){
    if(threshold<0||rows<=0||cols<=0){
        return 0;
    }
    int * visited = (int *)malloc(sizeof(int)*rows*cols);
    //for(int i = 0; i<cols*rows;++i){
    //    visited[i] = 0;//初始化
    //}
    memset(visited,0,rows*cols);
    int count = movingCountCore(threshold,rows,cols,0,0,visited);
    free(visited);
    return count;
}

moving.h:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int movingCount(int threshold,int rows,int cols);
int movingCountCore(int threshold,int rows,int cols,int row,int col,int* visited);
int GetDigitSum(int number);
int check(int threshold,int rows,int cols,int row,int col,int * visited);

测试用例代码:

//主函数
int main(){
    //全部都在范围内
    int count = movingCount(18,5,5);
    printf("count expect:25 actual:%d\n",count);
    //部分在范围内
    count = movingCount(9,9,9);
    printf("count expect:53 actual:%d\n",count);
    //全部不在范围内
    count = movingCount(-5,18,18);
    printf("count expect:0 actual:%d\n",count);
    return 0;
}

显示结果:

泛微OA集成阿里云短信(E9保姆教程) 阅读详情

相关推荐

基于OpenMV与双舵机云台的激光追踪系统实战解析

本文详细解析了基于OpenMV摄像头与双舵机云台的激光追踪系统设计与实现。从硬件选型、图像识别算法到PID控制逻辑,全面介绍了如何构建一个高效稳定的激光追踪系统,并分享了电子设计竞赛中的实战经验与调试技巧。该系统在智能玩具、安防监控及教学演示等领域具有广泛应用前景。

prometheus9mon的博客 261

数据结构机器人布线c++------(迷宫算法)

题目要求: 布线区域分成的方格阵列。要求确定连接方格s到方格d的最短布线方案。布线的时候,电路只能沿着直线或者直角布线,有障碍的方格做了封锁标记(X),其他线路不允许穿过被封锁的方格。 (1)用文件保存布线区域,用1、0分别表示某个格子是否有障碍;S,D表示起点和终点; (2)给出最短的布线路径长度; (3)用文件保存布线路径,用*表示布线的方格; 主要功能: (1)从文件中读出题目的输入; (2)向屏幕上打印出题目的计算结果; .

t70707084的博客 1057

修改串口服务器,串口虚拟化 | 串口服务器Nport 5630 设置

原标题:串口虚拟化 | 串口服务器Nport 5630 设置JZGKCHINA项目改造,客户需要对IFix4.5进行升级,并优化通讯,在不改变原来配置的基础上逐步进行替换。需要将IFix升级到IFix5.9,数据库升级为SQL Server 2016,客户现场使用的智能仪表都是支持Modbus RTU协议的,因原来的手拉手的通讯方式的,当一台仪表掉线后,会影响到其他仪表的通讯,所以此次在不改变原有...

weixin_31688465的博客 2408

(搜索) 剑指 Offer 13. 机器人的运动范围 ——【Leetcode每日一题】

剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?

weixin_43412762的博客 1710

新版本大疆智图4.5 永久许可摄影测量建模软件

大疆智图支持常见格式的成果输出,包括 TIFF 正射影像和高程模型、LAS 格式点云,以及 B3DM、OSGB、OBJ 等六种常用格式的三维模型,还包括 DXF 和 SHP 等格式的等高线。大疆智图 DJI Terra是领先的三维重建软件,提供先进的技术和简单的操作,一站式解决方案,从航线规划到数据的获取,以及模型重建、数据分析等都提供独一无二的支持,优化项目工程,提供自动化优势,获得更有效智能的决策和行动,最终用户可以获得理想的结果,减轻工作压力,提高作业效率。质量报告和剖面查看功能有助于分析点云质量。

qq_62821232的博客 6906

ICC II 时钟树综合(CTS)前奏:从约束定义到NDR规则的全方位设置指南

本文详细介绍了ICC II中时钟树综合(CTS)的前期准备工作,包括约束定义、NDR规则设置和时钟平衡点控制等关键步骤。通过实际案例和代码示例,指导工程师如何优化时钟偏斜、插入延迟和信号质量,确保芯片设计的时序收敛和性能稳定。特别强调了非默认布线规则(NDR)在时钟网络设计中的重要性。

weixin_42530458的博客 212

每日一题:Leetcode 面试题13.机器人的运动范围

题目描述: 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人...

qq_44584356的博客 767

GCdepth散点图绘制

基因组组装完成后,需要对组装结果进行评估,其中GC_depth图是一个比较重要的指标,改图的横坐标是GC含量,纵坐标是平均深度。以30k为窗口(window)无overlap计算其GC含量和平均深度。如果存在样品污染,通常能够从GC含量分析中呈现出来。下文探索了几种绘制GC_depth散点图的方法思路。

huangliangbo的专栏 8993

【leetcode】机器人的运动范围(递归回溯)

# -*- coding:utf-8 -*- class Solution: def getDigitSum(self, num): sum = 0 while num &gt; 0: sum += num % 10 num = int(num / 10) return sum def...

fanc的博客 1106

海康visionmaster开发笔记10-集成HALCON第三方算子到VM工具箱的方法

海康visionmaster开发笔记10-HALCON第三方算子到VM工具箱的方法

视觉人机器视觉的博客 4348

WinCC 7.5 读取 SQL server2016 中的表格数据

环境 win10 SQL Server 2016 WinCC V7.5 SP2 1 安装SQL Server 2016 2 选择服务器名称 .\WINCC 3 建数据库

skr? 7141

头歌数据结构——机器人的运动范围

头歌数据结构——机器人的运动范围

Sherry_liangtang的博客 908

数仓建模—维度建模之维度表

首先要学会识别维度,维度是相对稳定的、可抽象具有共性的、固有的(天然的)描述度量或事实的上下文属性信息,失去维度信息的度量信息是没有意义的或者说是失去维度信息的事实表是没有意义的。其次要掌握维度表的设计原则和设计流程,从而更加科学的设计维度表,其实这些东西都是术,我们一直都说一句话大道至简,其实如果你掌握了精髓,抛开这些术也可以做到得心应手,这就像张无忌练太极剑一样,忘记了才能达到道的境界,也就是无我,如果做不到就记住这些原则加以应用从而达到术的境界。

2401_84052244的博客 4364

数据结构与算法(21):机器人的运动范围

剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子? 示例 1: 输入:m = 2, n = 3, k = 1

冷雨清的博客 165

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数据结构——机器人的运动范围

1,前言 这道题求解的核心是使用深度优先搜索算法,理解了这个算法这道题自然就容易解了,但是题目的表述十分让人疑惑,如果不看代码,甚至连题目都读不懂,不知道题目想要表达的意思是什么。 2,求解 int getDigitalSum(int pos) { int sum = 0; while (pos != 0) { sum += pos % 10; pos = pos / 10; } return sum; } int movingCountCore(int threshold, int r

Christo的博客 381

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构与算法-剑指Offer系列(12)机器人的运动范围-Java实现

题目12:机器人的运动范围 题目描述: 地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子? 题目分析: 本题11...

Three_ST的博客 200

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

剑指数据结构-机器人的运动范围

// class Solution { public: vector<int> splitnum(int n){ vector<int> ans; if(n<10){ ans.push_back(n); } else if(n<100){ // 68 - 6- 8 强制整型 ans.push_back(n/10);

g678678的博客 110

机器人的运动范围

该代码实现了机器人移动范围的BFS解法。给定阈值threshold和矩阵行列数rows、cols,计算可达的格子数量。算法从(0,0)出发,使用队列进行BFS遍历,检查每个格子的数位和是否超过阈值,并标记已访问的格子。通过四方向移动扩展可达区域,最终返回可达格子总数。核心函数get_sum计算坐标的数位和,movingCount函数实现BFS主逻辑,使用二维数组st记录访问状态,时间复杂度为O(mn)。

m0_60479134的博客 157

java 剑指offer之[数据结构 困难JZ13 机器人的运动范围

题目的链接在这里:https://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8 目录题目大意一、示意图二、解题思路DFSBFS 题目大意 地上有一个rows行和cols列的方格。坐标从 [0,0] 到 [rows-1,cols-1]。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于threshold的格子。 例如,当threshold为18时,机器人能够进入方

wzw的博客 132

#数据结构与算法学习笔记#剑指Offer64:机器人的运动范围 + 回溯法(Java、C/C++)

2019.3.5 《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门​​​​​​​ 做了上一道回溯法的题目之后: #数据结构与算法学习笔记#剑指Offer63:矩阵中的路径 + 回溯法(Java、C/C++),发现套路居然如出一辙。 区别在于这道题不是是否存在特定路径的问题,而是最大可达连通区域的问题。思路有点区别,但是大体相似。建立一个全局的可达结点计数器result,一个...

NJU_ChopinXBP的博客 318

15机器人的运动范围--剑指offer,java版

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

sexy_orange的博客 202

回溯法练习

第一题:矩阵中的路径

weixin_43615992的博客 289

剑指Offer系列刷题笔记

剑指Offer系列刷题笔记汇总 文章目录剑指Offer系列刷题笔记汇总前言一、目录如下(持续更新) 前言 本系列为《剑指Offer》第二版全集 使用语言:Java 记录自己学习过程 从第一题开始 开始时间2021年10月27日21:00; 一、目录如下(持续更新) ...

qq_53183211的博客 478

【直通BAT】剑指Offer-经典试题整理(2)

13 机器人的运动范围 题目描述 地上有一个 m 行和 n 列的方格。 一个机器人从坐标 0,0 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。 但是不能进入行坐标和列坐标的数位之和大于 k 的格子。 请问该机器人能够达到多少个格子? 样例1 输入:k=7, m=4, n=5 输出:20 样例2 输入:k=18, m=40, n=40 输出:1484 解释:当k为18时,机器人...

我的博客 239

【每日算法Day 94】经典面试题:机器人的运动范围

最近在忙面试,本来今天都不想更了,但是看基础知识看的太累了,于是写道题排解一下压力。 题目链接 LeetCode 面试题13. 机器人的运动范围[1] 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0, 0] 到坐标 [m-1, n-1] 。一个机器人从坐标 [0, 0]...

算法码上来 599

剑指offer 题9,12-18 python题解记录

题9:用两个栈实现队列 队列是先进先出,栈是先进后出,两个栈实现队列的基本思想就是:数据从stack1进入,再将stack1中的数据倒到stack2中,那么从stack2中出来的数据顺序就和进入stack1中的数据顺序一样了,也就实现了队列。处理细节就是,有数据进入时,只管往stack1中添加,当需要取出数据时,只管从stack2中取,如果stack2为空,那么就把stack1中的元素倒到stack2中(妙喵喵~ 王先生题解????here class CQueue: def __init__(se

Superpig的博客 209
上一篇: 替换空格-----数据结构
下一篇: 快速排序算法-----数据结构
CYD、孤狼
博客等级 码龄9年 24粉丝 129原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值