【华为OD机试真题E卷】521、 机器人可活动的最大网格点数目 | 机试真题+思路参考+代码解析(E卷复用)(C++)

文章目录

  • 一、题目
    • 题目描述
    • 输入输出
    • 样例1
  • 一、代码与思路
    • 🧠C++语言思路
      • ✅C++代码

一、题目

参考链接:https://sars2025.blog.csdn.net/article/details/141748083

题目描述

现有一个机器人口,可放置于MxN的网格中任意位置,每个网格包含一个整数编号,当相邻网格的数字编号差值的绝对值小于等
于1时,机器人可以在网格间移动。
问题:求机器人可活动的最大范围对应的网格点数目
说明:网格左上角坐标为(0,0),右下角坐标为(m-1,n-1),机器人只能在相邻网格间上下左右移动

输入输出

输入
第1行输入为M和N,M示网格的行数N表示网格的列数
之后M行表示网格数值,每行N个数值(数值大小用k示)
数值间用单个空格分隔,行首行尾无多余空格。
M、N、k均为整数,且1≤M,N≤150,0≤k≤50
输出
输出1行,包含1个数字,表示最大活动区域的网格点数目,行首行尾无多余空格

样例1

输入
4 4
1 2 5 2
2 4 4 5
3 5 7 1
4 6 2 4

输出
6

一、代码与思路

🧠C++语言思路

1.首先定义一个深度优先搜索函数dfs,用于计算从指定位置出发的活动区域的网格点数目
2.在dfs函数中,首先获取网格的行数m和列数n,并初始化活动区域的网格点数目为1。然后标记当前网格为已访问状态,
3.定义一个存储上下左右四个方向偏移量的directions数组。
4.遍历directions数组中的每个方向,计算新的坐标nx和ny。
5.如果新坐标满足条件(在网格范围内、未被访问、相邻网格编号差值的绝对值小于等于1),则递归调用dfs函数计算新位置的活动区
域的网格点数目,并将其累加到area中。
6.最后返回area作为当前位置的活动区域的网格点数目。
7.定义主函数main,在main函数中首先读取输入的网格大小m和n,并创建一个二维vector grid用于存储网格。
8.通过嵌套循环读取每个网格的数值,并将其存储在grid中。
9.调用maxGridArea函数计算最大活动区域的网格点数目,并将结果输出到标准输出流中。
10.返回0,表示程序执行完毕。

✅C++代码

#include <iostream>
#include <vector>
using namespace std;int dfs(vector<vector<int>>& grid, int i, int j, vector<vector<bool>>& visited) {int m = grid.size();int n = grid[0].size();int area = 1;  // 活动区域的网格点数目,初始为1visited[i][j] = true;  // 将当前网格标记为已访问vector<pair<int, int>> directions = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};  // 上下左右四个方向的偏移量// 深度优先搜索for (auto direction : directions) {int dx = direction.first;int dy = direction.second;int nx = i + dx;int ny = j + dy;if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visited[nx][ny] && abs(grid[nx][ny] - grid[i][j]) <= 1) {// 如果相邻网格满足条件(编号差值的绝对值小于等于1),则继续搜索area += dfs(grid, nx, ny, visited);}}return area;
}int maxGridArea(vector<vector<int>>& grid) {int m = grid.size();  // 网格的行数int n = grid[0].size();  // 网格的列数int maxArea = 0;  // 最大活动区域的网格点数目// 创建一个与网格大小相同的二维数组,用于记录已访问的网格vector<vector<bool>> visited(m, vector<bool>(n, false));// 遍历网格的每个位置作为起点for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (!visited[i][j]) {int area = dfs(grid, i, j, visited);  // 深度优先搜索计算当前起点的活动区域的网格点数目maxArea = max(maxArea, area);  // 更新最大活动区域的网格点数目}}}return maxArea;
}int main() {int m, n;cin >> m >> n;vector<vector<int>> grid(m, vector<int>(n));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> grid[i][j];}}int maxArea = maxGridArea(grid);cout << maxArea << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页

背景 对于一些只能在ubuntu上运行的脚本&#xff0c;并且这个脚本会在ubuntu上通过网页展示运行结果。我们希望可以使用windows远程操控ubuntu&#xff0c;在windows上查看网页内容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…

Vue3集成浏览器API实时语音识别

效果示例 用法 <!-- 浏览器语音识别 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…

k8s 手动续订证书

注意:如果是高可用环境,本文的操作需要在所有控制节点都执行。 查看证书是否过期 kubeadm certs check-expirationkubeadm certs renew可以续订任何特定证书,或者使用子命令all可以续订所有证书: kubeadm certs renew all使用 kubeadm 构建的集群通常会将admin.conf证书复…

每日一道leetcode(补充版)

1679. K 和数对的最大数目 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个整数数组 nums 和一个整数 k 。 每一步操作中&#xff0c;你需要从数组中选出和为 k 的两个整数&#xff0c;并将它们移出数组。 返回你可以对数组执行的最大操作数。 示例 1&#xff1a; …

基于Keras3.x使用CNN实现简单的猫狗分类

使用CNN实现简单的猫狗分类 完整代码见&#xff1a;基于Keras3.x使用CNN实现简单的猫狗分类&#xff0c;置信度约为&#xff1a;85% 文章目录 概述项目整体目录环境版本注意 环境准备下载miniconda新建虚拟环境基于conda虚拟环境新建Pycharm项目下载分类需要用到的依赖 数据准备…

中介者模式:解耦对象间复杂交互的设计模式

中介者模式&#xff1a;解耦对象间复杂交互的设计模式 一、模式核心&#xff1a;用中介者统一管理对象交互&#xff0c;避免两两直接依赖 当系统中多个对象之间存在复杂的网状交互时&#xff08;如 GUI 界面中按钮、文本框、下拉框的联动&#xff09;&#xff0c;对象间直接调…

豆包桌面版 1.47.4 可做浏览器,免安装绿色版

自己动手升级更新办法&#xff1a; 下载新版本后安装&#xff0c;把 C:\Users\用户名\AppData\Local\Doubao\Application 文件夹的文件&#xff0c;拷贝替换 DoubaoPortable\App\Doubao 文件夹的文件&#xff0c;就升级成功了。 再把安装的豆包彻底卸载就可以。 桌面版比网页版…

Android PackageManagerService(PMS)框架深度解析

目录 一、概念与核心作用 二、技术架构与模块组成 1. 分层架构 1.1 应用层架构细节 1.2 Binder接口层实现 1.3 PMS核心服务层 1.4 底层支持层实现 2. 核心模块技术要点与工作流程 2.1 PackageParser 2.2 Settings 2.3 PermissionManager 2.4 Installer 2.5 ComponentM…

TensorFlow深度学习实战(14)——循环神经网络详解

TensorFlow深度学习实战(14)——循环神经网络详解 0. 前言1. 基本循环神经网络单元1.1 循环神经网络工作原理1.2 时间反向传播1.3 梯度消失和梯度爆炸问题2. RNN 单元变体2.1 长短期记忆2.2 门控循环单元2.3 Peephole LSTM3. RNN 变体3.1 双向 RNN3.2 状态 RNN4. RNN 拓扑结构…

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)

文章目录 类描述构造方法主要方法1. 基础属性2. 边界操作3. 几何运算4. 坐标调整5. 转换方法6. 状态判断 类特点总结1. 浮点精度&#xff1a;2. 坐标系统&#xff1a;3. 有效性判断&#xff1a;4. 几何运算&#xff1a;5. 类型转换&#xff1a;6. 特殊处理&#xff1a; 典型应用…

Electron主进程渲染进程间通信的方式

在 Electron 中&#xff0c;主进程和渲染进程之间的通信主要通过 IPC&#xff08;进程间通信&#xff09;机制实现。以下是几种常见的通信方式&#xff1a; 1. 渲染进程向主进程发送消息&#xff08;单向&#xff09; 渲染进程可以通过 ipcRenderer.send 向主进程发送消息&am…

【C++基础知识】C++类型特征组合:`disjunction_v` 和 `conjunction_v` 深度解析

这两个模板是C17引入的类型特征组合工具&#xff0c;用于构建更复杂的类型判断逻辑。下面我将从技术实现到实际应用进行全面剖析&#xff1a; 一、基本概念与C引入版本 1. std::disjunction_v (逻辑OR) 引入版本&#xff1a;C17功能&#xff1a;对多个类型特征进行逻辑或运算…

私有知识库 Coco AI 实战(二):摄入 MongoDB 数据

在之前的文章中&#xff0c;我们介绍过如何使用《 Logstash 迁移 MongoDB 数据到 Easyseach》&#xff0c;既然 Coco AI 后台数据存储也使用 Easysearch&#xff0c;我们能否直接把 MongoDB 的数据迁移到 Coco AI 的 Easysearch&#xff0c;使用 Coco AI 对数据进行检索呢&…

sql server 与navicat测试后,连接qt

先用Navicat测试和sql的连通性&#xff0c;Navicat和sql连通之后&#xff0c;qt也能和sql连通了。 Navicat和Sqlserver Management 能连上&#xff0c;项目无法连接本地 Navicat 连接SQLServer 数据库 QT国内镜像网站 Navicat连接SqlServer的问题点 Sql Server的基本配置以及使…

2025年3月电子学会青少年机器人技术(六级)等级考试试卷-理论综合

青少年机器人技术等级考试理论综合试卷&#xff08;六级&#xff09; 分数&#xff1a;100 题数&#xff1a;30 一、单选题(共20题&#xff0c;共80分) 1. 2025年初&#xff0c;中国科技初创公司深度求索在大模型领域迅速崛起&#xff0c;其开源的大模型成为全球AI领域的焦…

spark local模式搭建运行示例

Apache Spark 是一个强大的分布式计算框架&#xff0c;但在本地模式下&#xff0c;它也可以作为一个单机程序运行&#xff0c;非常适合开发和测试阶段。以下是一个简单的示例&#xff0c;展示如何在本地模式下搭建和运行 Spark 程序。 一、环境准备 安装 Java Spark 需要 Java…

【人工智能】解锁 AI 潜能:DeepSeek 大模型迁移学习与特定领域微调的实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大型语言模型(LLMs)的快速发展,迁移学习与特定领域微调成为提升模型性能的关键技术。本文深入探讨了 DeepSeek 大模型在迁移学习中的…

视频智能分析平台EasyCVR无线监控:全流程安装指南与功能应用解析

在当今数字化安防时代&#xff0c;无线监控系统的安装与调试对于保障各类场所的安全至关重要。本文将结合EasyCVR视频监控的强大功能&#xff0c;为您详细阐述监控系统安装过程中的关键步骤和注意事项&#xff0c;帮助您打造一个高效、可靠的监控解决方案。 一、调试物资准备与…

【k8s系列7-更新中】kubeadm搭建Kubernetes高可用集群-三主两从

主机准备 结合前面的章节,这里需要5台机器,可以先创建一台虚拟机作为基础虚拟机。优先把5台机器的公共部分优先在一台机器上配置好 1、配置好静态IP地址 2、主机名宇IP地址解析 [root@localhost ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost…

【Java后端】MyBatis 与 MyBatis-Plus 如何防止 SQL 注入?从原理到实战

在日常开发中&#xff0c;SQL 注入是一种常见但危害巨大的安全漏洞。如果你正在使用 MyBatis 或 MyBatis-Plus 进行数据库操作&#xff0c;这篇文章将带你系统了解&#xff1a;这两个框架是如何防止 SQL 注入的&#xff0c;我们又该如何写出安全的代码。 什么是 SQL 注入&#…