1162. 地图分析
和01矩阵一样
先找所有的1是起点,再从每个1开始向内广度优先,直至遍历完全部节点
#include <stdc++.h>
using namespace std;
int line;
int raw;
int setPos(int x, int y) { return x * raw + y; }
int getLine(int pos) { return pos / raw; }
int getRaw(int pos) { return pos % raw; }int maxDistance(vector<vector<int>>& grid) {queue<int> bfs;line = static_cast<int>(grid.size());if (line != 0) raw = static_cast<int>(grid[0].size());for (int i = 0; i < line; ++i) {for (int j = 0; j < raw; ++j) {if (grid[i][j] == 1) bfs.push(setPos(i, j));}}int ret = INT_MIN;if (bfs.empty() || bfs.size() == grid.size() * grid.size()) return -1;while (!bfs.empty()) {int cur_pos = bfs.front();bfs.pop();int x = getLine(cur_pos), y = getRaw(cur_pos);ret = max(ret, grid[x][y]);if (x + 1 < line) {if (grid[x + 1][y] == 0) {grid[x + 1][y] = grid[x][y] + 1;bfs.push(setPos(x + 1, y));} else {grid[x + 1][y] = min(grid[x + 1][y], grid[x][y] + 1);}}if (x - 1 >= 0) {if (grid[x - 1][y] == 0) {grid[x - 1][y] = grid[x][y] + 1;bfs.push(setPos(x - 1, y));} else {grid[x - 1][y] = min(grid[x - 1][y], grid[x][y] + 1);}}if (y + 1 < raw) {if (grid[x][y + 1] == 0) {grid[x][y + 1] = grid[x][y] + 1;bfs.push(setPos(x, y + 1));} else {grid[x][y + 1] = min(grid[x][y + 1], grid[x][y] + 1);}}if (y - 1 >= 0) {if (grid[x][y - 1] == 0) {grid[x][y - 1] = grid[x][y] + 1;bfs.push(setPos(x, y - 1));} else {grid[x][y - 1] = min(grid[x][y - 1], grid[x][y] + 1);}}}return ret - 1;
}int main() {vector<vector<int>> a = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}};cout << maxDistance(a) << endl;;return 0;
}
1162. 地图分析相关推荐
- leetcode:1162. 地图分析
题目来源 leetcode:1162. 地图分析 题目描述 题目解析 题目分析 本题要求:求所有海洋点到离它最近的陆地点的距离的最大值. 问题:什么是距离?这里是曼哈顿距离,就是只能沿着横.竖到达另外 ...
- LeetCode - 1162 地图分析
题目来源 1162. 地图分析 - 力扣(LeetCode) 题目描述 你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了.其中 0 代表海洋,1 ...
- LeetCode:1162. 地图分析+模板链接
题目 LeetCode:1162. 地图分析 你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地 ...
- LeetCode 1162. 地图分析(BFS)
1. 题目 你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域 ...
- 1162. 地图分析 BFS Dijkstra算法
你现在手里有一份大小为 N x N 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的 ...
- LeetCode 1162 地图分析
题目: 你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是 ...
- 365天挑战LeetCode1000题——Day 081 统计子串中的唯一字符 地图分析 太平洋大西洋水流问题
828. 统计子串中的唯一字符 按贡献值,也就是每个字符可能在多少个字符串中出现来进行计算,大大降低了复杂度 代码实现(部分看题解) class Solution {public:int unique ...
- leetcode刷题:不同路径II
分析: 我们用 f(i, j)f(i,j) 来表示从坐标 (0, 0)(0,0) 到坐标 (i, j)(i,j) 的路径总数,u(i, j)u(i,j) 表示坐标 (i, j)(i,j) 是否可行,如 ...
- 2019年9月Leetcode每日训练日志
2019-09-16 #1171 从链表中删去总和值为零的连续节点 #1170 比较字符串最小字母出现频次 #1169 查询无效交易 #226 翻转二叉树 2019-09-15 #1190 反转每对括 ...
最新文章
- [Java基础] Java如何实现条件编译
- Java克隆(Clone)的应用
- ORM对mysql数据库中数据进行操作报错解决
- Java中List for循环的6种写法总结(推荐)(亲测)
- JS中遍历数组的两种方式
- Java 8最新消息
- 计算机计算exp函数原理,exp()函数的数值计算中的系数
- window和linux下Redis 安装和使用
- 用sql的select语句从数据库中获取数据
- 存储系统的实现-探析存储的机制和原理
- C语言:丹尼斯·里奇的不朽遗产
- RGB彩色空间和YIQ、灰度等的转化
- 浅学C#(3)——C#的优点和缺点
- 《鹰猎长空》讲述戏曲与电影的渊源
- 电网企业 财务管理创新
- IOS手机ssh连接linux好用工具
- VB.NET模拟LED数字钟
- 如何拍摄VR全景照片
- 字符编码:计算机的巴别塔
- Mac OS 如何升级到指定版本