
AcWing 24 机器人的运动范围
发布日期:2021-05-28 16:30:15
浏览次数:22
分类:精选文章
本文共 1811 字,大约阅读时间需要 6 分钟。
机器人起始于坐标(0,0),每次只能上下左右移动一格,条件是不能进入行坐标与列坐标的数位之和超过k以内的格子。为了计算机器人能到达的所有格子的数量,可以使用广度优先搜索(BFS)来逐层扩展探索。BFS能够确保所有可达的格子都被计算到,并且避免重复访问,从而得出正确的结果。以下是解决方案的详细步骤:
初始化结构:创建队列用于管理待访问的格子,并初始化一个二维数组用于记录已访问的格子。将起始格子(0,0)加入队列,并标记为已访问。
定义方向数组:用于表示四个移动方向的增量,包括上下左右。
数位和计算函数:一个辅助函数计算一个数的各位数字之和。例如,数25的二位数字之和为2+5=7。
BFS遍历过程:
- 取出队列中的当前格子,计入总数。
- 对于四个方向,计算下一个可能的格子坐标。
- 检查新坐标是否在合法范围内,未被访问过,且其数位之和不超过k。
- 如果满足条件,将该坐标加入队列,并标记为已访问。
边界处理:确保行坐标nx在0到rows-1之间,列坐标ny在0到cols-1之间。
循环处理队列:直到队列为空,完成所有可达格子的遍历。
通过这种方法,可以高效地解决问题,确保正确计数所有符合条件的格子。
代码示例:
class Solution {public: int movingCount(int threshold, int rows, int cols) { if (rows == 0 || cols == 0) return 0; int cnt = 0; queue> q; bool inq[rows][cols]; memset(inq, 0, sizeof(inq)); q.push({0, 0}); inq[0][0] = 1; int dx[] = {0, 0, -1, 1}; int dy[] = {1, -1, 0, 0}; while (!q.empty()) { auto t = q.front(); q.pop(); cnt++; for (int i = 0; i < 4; ++i) { int nx = t.first + dx[i]; int ny = t.second + dy[i]; if (nx < 0 || nx >= rows || ny < 0 || ny >= cols) // 越界检查 continue; if (inq[nx][ny]) // 已访问过的格子不能再次访问 continue; if (sumDigits(nx) + sumDigits(ny) > threshold) // 数位和超过阈值,则被视为障碍 continue; inq[nx][ny] = 1; q.push({nx, ny}); } } return cnt; } int sumDigits(int n) { int ans = 0; while (n > 0) { ans += n % 10; n /= 10; } return ans; }};
关键点分析:
- 初始化和输入检查:首先处理特殊情况,如rows或cols为0。
- BFS队列处理:使用队列来逐层扩展,确保每个格子只被访问一次。
- 数位和条件判断:对于每一步的新坐标,计算其数位之和,确保不超过阈值。
- 边界和重复访问检查:防止越界和重复计算,确保算法的正确性和效率。
通过上述步骤,机器人能够顺利到达合法的所有格子,统计出最终的可达格子数量。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月17日 21时31分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【数据库】实验二~六
2019-03-17
uni-app的请求数据的封装
2019-03-17
C++容器笔记
2019-03-17
Android 四大组件、五大存储、六大布局总结
2019-03-17
【VRP问题】基于模拟退火改进遗传算法求解带时间窗含充电站的车辆路径规划问题EVRPTW
2019-03-17
打工族有房有车,原来是这么实现的
2019-03-17
算法 顺序查找/折半查找/冒泡排序/选择排序(待改)
2019-03-17
Rancher从入门到精通-2.0 配置gitlab代码库 404页面 原因有点扯
2019-03-17
ProgresSql 连接 ssl off 错误
2019-03-17
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
2019-03-17
Oracle Listener动态注册与静态注册(转载)
2019-03-17
Kubernetes 无法查询到并且无法删除pod实例的排查过程
2019-03-17
android中button修改不了背景颜色
2019-03-17
uniapp自定义弹窗组件|仿微信android/ios弹窗效果
2019-03-17
(网络安全)主动信息收集 操作系统识别
2019-03-17
奥比中光体积最小的3D刷脸模组发布,智能锁设计要迎来颠覆?
2019-03-17
Class和ClassLoader的getResource方法对比
2019-03-17
redis教程-redis环境搭建安装(qq:1197852132)
2019-03-17