874 模拟行走机器人

874. 模拟行走机器人 二维模拟与坐标系统理解方向控制技巧障碍物避让逻辑哈希集合优化查询效率路径模拟与距离计算这是一道非常经典的模拟题,也是 LeetCode 中“机器人路径”、“障碍检测”等题型的入门代表。熟练掌握后可举一反三,拓展到图形学、路径规划、智能体模拟等场景。也可以留言你在做这道题时遇到的坑,我们一起交流学习! 阅读详情

依题意,显然应该一步步模拟之
其中难解决的两个问题:

  1. 如何判断面对的是障碍点?
    当然可以定义一个很大的二维数组,然后将障碍点记为1,但那样极其浪费内存
    我们可以定义一个类型为pair的set,一开始将障碍点的坐标insert进set中,每走一步,判断面对的点是不是障碍点,若不是障碍点,则继续往前走,若是障碍点,则停下,等待转弯
    我这里选择了unordered_set,需要注意自己重写一个哈希类

可以参考 https://blog.youkuaiyun.com/include_not_found_/article/details/104881974

  1. 如何实现左转右转?
    可以用两个整数dx,dy来表示现在面对的方向。
    在这里插入图片描述
    可以观察出以下规律:
    右转90度时,dx = old_dy, dy = -old_dx
    左转90度是右转90度的逆过程,dx = -old_dy, dy = old_dx
    问题就很容易解决了

代码:

class s_hash
{
    public:
        inline size_t operator()(const pair<int, int> &p)const 
        {
            return (p.first + p.second) % 9209; 
            // 想不到什么好的哈希函数=。=
            // 所以简单粗暴地相加,数据在-30000到30000之间,模一个素数
        }   
};

class Solution {
public:
    int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
        int dx = 0, dy = 1, temp; // 一开始向北
        int cur_x = 0, cur_y = 0, ans = 0;
        unordered_set<pair<int, int>, s_hash> s; // 不用自动排序加快速度
        for(auto o : obstacles) s.insert(make_pair(o[0], o[1]));
        for(auto c : commands)
        {
            if(c == -1) {temp = dx; dx = dy;  dy = -temp;}
            if(c == -2) {temp = dx; dx = -dy;  dy = temp;}
            for(int i = 0; i < c; i++) // 一步步模拟
            {
                // 无障碍,则更新,前方有障碍则等待转弯
                if(s.find(make_pair(cur_x + dx, cur_y + dy)) == s.end())
                {
                    cur_x += dx;
                    cur_y += dy;
                    ans = max(ans, cur_x * cur_x + cur_y * cur_y);
                }
            }
        }
        return ans;
    }
};
Leetcode 874:模拟行走机器人(超详细的解法!!!) 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 &lt;= x &lt;= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 如果机器人试图走到障碍物上方,那么它将... 阅读详情

相关推荐

Leetcode 874.模拟行走的机器人python

ps:判断当前位置是否处于障碍物处,可以使用set(),但我来个剑走偏锋,哈哈。 class Solution: def robotSim(self, commands: List[int], obstacles: List[List[int]]) -> int: #东、南、西、北四个方向代号分别表示为:0、1、2、3 #东:+x,南:-y,西:-x,北:+y move_x = [1,0,-1,0] move_y = [0,-1

tanya_dre的博客 254

ros turtlebot3在gazebo中实现遇到障碍转弯

目录Wander.h 文件Wander.cpp文件run_wander.cpplaunch文件cmakelists Wander.h 文件 #include "ros/ros.h" #include "sensor_msgs/LaserScan.h" class Wander { public: // Tunable parameters 可调参数 const double FORWARD_SPEED = 0.5; double angular_velocity; //随机获

白菜 1326

leetcode: 874. 模拟行走机器人

顺时针方向,先确定方向,然后一步一步走,遇到障碍就break,如果没有就更新坐标,计算距离,更新最大距离;障碍可以使用哈希表,加快查询速度。机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令。返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。(即,如果距离为 5 ,则返回 25 )机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。在网格上有一些格子被视为障碍物。..

uncle_ll的博客 711

leetcode 874. 模拟行走机器人

【题目】874. 模拟行走机器人 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器...

Sophia_fez的博客 454

零成本矩阵玩法:1人运营5个账号的自动化工具链配置(2025全平台实战)

通过“AI内容生产+工具链分发+自动化变现”的组合拳,即使是新手也能实现1人运营5个账号的规模化收益。关键在于选对工具与设计标准化流程。未来,矩阵运营的竞争将聚焦于工具使用效率与数据洞察深度,快人一步者方能抢占先机!

TuFuir的博客 3785

地震勘探中的频谱分析:从基础到应用

本文深入探讨了地震勘探中的频谱分析技术,从基础原理到实际应用。通过傅里叶变换等工具,频谱分析能有效识别不同地震波的频率特征,指导数据采集和处理。文章结合油田勘探案例,展示了如何利用振幅谱和相位谱提升信噪比,并介绍了智能滤波等前沿技术在地震数据处理中的应用。

weixin_42557830的博客 406

算法:874. 模拟行走机器人

算法 874. 模拟行走机器人 机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 <= x <= 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位于网格点 obstacles[i] = (xi, yi) 。 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝

AI架构师易筋 995

秋叶ComfyUI整合包:一键部署AI绘画工作流,解决环境配置难题

在AI绘画和生成式AI领域,Stable Diffusion作为开源的扩散模型,为图像生成提供了强大的技术基础。其核心原理是通过学习数据分布,对随机噪声进行逐步去噪,最终生成高质量的图像。这项技术的价值在于极大地降低了专业图像创作的门槛,并推动了AIGC(人工智能生成内容)在艺术设计、游戏开发、广告营销等场景的广泛应用。然而,其典型工作流实现工具ComfyUI,在实际部署中常因Python环境、PyTorch版本与CUDA驱动之间的复杂依赖关系而受阻,尤其是面对NVIDIA 30系、40系及未来50系等不同

优快云头条 668

leetcode 874 模拟行走机器人

874. 模拟行走机器人 难度简单120收藏分享切换为英文接收动态反馈 机器人在一个无限大小的网格上行走,从点(0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转90 度 -1:向右转 90 度 1 <= x <= 9:向前移动x个单位长度 在网格上有一些格子被视为障碍物。 第i个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然...

weixin_41579872的博客 275

STM32F030F4P6 ADC多通道定时器触发DMA搬运

主函数中等待转换完成的标志位,然后打印出来。ADC回调函数中将数值赋值给变量。配置定时器1s读一次。

qq_24426625的博客 1355

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

【leetcode-python-22】874. 模拟行走机器人

【leetcode-python-22】874. 模拟行走机器人渣渣原始版(超时啦!)官方版(57.64%) leetcode 874. 模拟行走机器人 渣渣原始版(超时啦!) class Solution(object): def robotSim(self, commands, obstacles): """ :type commands: List[int] :type obstacles: List[List[int]] :rt

huajiao4的博客 225

硬件基础知识-电机知识

步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声;在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。给电机两根线供电,电机就可以旋转,给正电压,电机正转,给相反电压,电机反转;电压越大,电机转得越快,电压越小,转速也变小。是一种直流电机,有刷电机的定子上安装有固定的主磁极和电刷,转子上安装有电枢绕组和换向器。控制器:使用专用的电子控制器来监测和控制电机的转速、电流和方向。线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

weixin_46969363的博客 2295

【LeetCode日记】 874. 模拟行走机器人

这是一道 LeetCode 难度为 easy 的题目,没有高深的算法,有的只是套路,我们来看下。原题地址:https://leetcode-cn.com/problems/walking...

azl397985856的专栏 292

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7607

Raspberry Pi 4B 蓝牙串口(SPP)配置与使用

Linux、Android、Windows 等操作系统带有在引导期间启动的蓝牙守护进程/蓝牙服务。 对于与监视器连接并使用 GUI(如 GTK 等)运行的设备,只需多次单击即可轻松启用并连接到附近的设备。 但是在无头设备的情况下,我们必须依赖于需要在命令行上运行的不同命令。 这篇博客我们将讨论如何在无头树莓派上通过蓝牙设备连接附近。

视觉与物联智能 2745

模拟行走机器人[874]

模拟行走机器人[874]题目题解 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。 返回从原点到机

hsc的博客 585

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LeetCode - 874 - 模拟行走机器人(walking-robot-simulation)

一 目录 不折腾的前端,和咸鱼有什么区别目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路二 前言 难度:简单涉及知识:贪心算法题目地址:https://l...

weixin_41806099的博客 388

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LeetCode JAVA解题---874. 模拟行走机器人

LeetCode 题库 全 JAVA 解题 874. 模拟行走机器人 原题回顾: 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0...

qq_28295947的博客 665

蓝牙模块HM-10手册

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

Leetcode 874. 模拟行走机器人

设映射后的数字为kx+y,我们想知道k为多少时不会发生碰撞。当碰撞时kx1+y1=kx2+y2,解出来k=(y2-y1)/(x1-x2),由于x,y的取值范围为[-30000,30000],那么k的取值范围为[-60000,60000],这个范围内的值都可能碰撞,比如k=60000时,(1,-30000)和(0,30000)算出来都是30000。除了以上,还要去想上下左右下标变换。嗯,很有意思的一个题。

JehanRio's Private Blog 223

Leetcode 874:模拟行走机器人

题目描述 机器人在一个无限大小的网格上行走,从点(0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转90 度 -1:向右转 90 度 1 <= x <= 9:向前移动x个单位长度 在网格上有一些格子被视为障碍物。 第i个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 如果机器人试图走到障...

weixin_35338624的博客 337
上一篇: set和map对象为自定义类型时需注意的问题
下一篇: 1029 两地调度
UnendingGlory
博客等级 码龄9年 55粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值