一、题目
参考链接:https://sars2025.blog.youkuaiyun.com/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

最低0.47元/天 解锁文章
1144

被折叠的 条评论
为什么被折叠?



