辽宁省建设厅网站更新,猫咪99永久找到回家的路,新白鹿网络营销方式,58同城合肥网站建设目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中#xff0c;刷题点这里 刷的越多#xff0c;抽中的概率越大#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试刷题点这里 刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
现有一个机器人可放置于 M × N的网格中任意位置每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时机器人可在网格间移动
问题求机器人可活动的最大范围对应的网格点数目。
说明
1网格左上角坐标为 (0, 0)右下角坐标为 (m-1, n-1)
2机器人只能在相邻网格间上、下、左、右移动
示例1输入如下网格
输出6
说明图中绿色区域相邻网格差值绝对值都小于等于1且为最大区域对应网格点数目为6
示例 2输入如下网格
输出1
二、输入描述
第1行输入为M和NM表示网格的行数N表示网格的列数。
之后M行表示网格数值每行N个数值数值大小用k表示数值间用单个空格分隔行首行尾无多余空格。
M、N、k均为整数且1M,N1500k50。
三、输出描述
输出1行包含1个数字表示最大活动区域对应的网格点数目
行末无多余空格
四、解题思路
读取输入的网格行数 M 和列数 N创建一个二维数组 region用于表示网格读取输入的网格数值并将其存储到 region 数组中初始化最大活动区域对应的网格点数目 max 为 0遍历网格中的每个网格点以每个网格点为起点进行深度优先搜索在深度优先搜索过程中判断当前网格点的数值是否有效 如果当前网格点的数值为 -1表示该网格点已经访问过直接返回 0如果当前网格点的数值与起点网格点的数值的差的绝对值大于 1表示不满足相邻网格差值的要求直接返回 0 将当前网格点的数值设为 -1表示已经访问过该网格点递归调用深度优先搜索函数分别向上、下、左、右四个方向移动并将每次递归返回的结果累加到 count 变量中返回最终的 count 值更新最大活动区域对应的网格点数目 max取当前网格点的 count 值与 max 的较大值输出最大活动区域对应的网格点数目 max
五、JavaScript算法源码
let region;
let M;
let N;function calculateMaxRegion(m, n, grid) {M m;N n;region [];for (let i 0; i M; i) {region[i] [];for (let j 0; j N; j) {region[i][j] grid[i][j];}}let max 0;for (let i 0; i M; i) {for (let j 0; j N; j) {if (region[i][j] ! -1) {max Math.max(max, move(i, j, region[i][j]));}}}return max;
}function move(row, col, num) {if (row 0 || col 0 || row M || col N) {return 0;}const currentNum region[row][col];if (currentNum -1 || Math.abs(currentNum - num) 1) {return 0;}region[row][col] -1;let count 1;count move(row - 1, col, currentNum);count move(row 1, col, currentNum);count move(row, col - 1, currentNum);count move(row, col 1, currentNum);return count;
}六、效果展示
1、输入
2 3 1 3 5 4 1 3
2、输出
1 下一篇华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】
本文收录于华为OD机试JavaScript真题A卷B卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。