LeetCode 934.最短的桥
LeetCode 934.最短的桥
在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)
现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。
返回必须翻转的 0 的最小数目。(可以保证答案至少是 1 。)
// 广度优先搜索 - 通过先入先出的队列实现
class Solution {
public:vector<int> direction{-1,0,1,0,-1};int shortestBridge(vector<vector<int>>& grid) {int m = grid.size(),n = grid[0].size();queue<pair<int,int>> points; // 队列queuebool finded = false; // 查找第一座岛for(int i=0;i<m;++i){for(int j=0;j<n;++j){if(finded) break;if(grid[i][j] == 1){finded = true;dfs(grid, points, i, j, m, n); // 深度遍历把第一个岛屿的1全部变成2,并把其旁边的0装入points队列;}}}// 广度遍历寻找最短距离;int res = 0;int x,y;while(!points.empty()){++res; // 第n层广度遍历,n = 最短距离;int tmp = points.size();while(tmp--){auto[r,c] = points.front(); // 依次取出第n层广度遍历时的每一个元素;points.pop();for(int k=0;k<4;k++) // 判断此元素旁边有无1(岛屿);{x = r + direction[k], y = c + direction[k+1];if(x>=0 && y>=0 && x<m && y<n){if(grid[x][y] == 1) // =1:找到岛屿;return res;if(grid[x][y] == 2) // =2:旁边是第一个岛屿,继续循环找;continue;points.push({x,y}); // =0;将需要下一层广度遍历的点push到points;grid[x][y] = 2; }}}}return 0;}void dfs(vector<vector<int>>& grid, queue<pair<int,int>>& points, int i, int j, int m, int n) {if(i<0 || j<0 || i==m || j==n || grid[i][j]==2)return;if( grid[i][j] == 0){points.push({i,j});return;}grid[i][j] = 2;dfs(grid, points, i+1, j, m, n);dfs(grid, points, i-1, j, m, n);dfs(grid, points, i, j+1, m, n);dfs(grid, points, i, j-1, m, n);}
};
LeetCode 934.最短的桥相关推荐
- LeetCode 934. 最短的桥(2次BFS)
1. 题目 在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大组.) 现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛. 返回必须翻转的 0 的最小数目. ...
- LeetCode 934 最短的桥
题目描述 在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大 组.)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛.返回必须翻转的 0 的最小数目.(可 ...
- 【LeetCode】934. 最短的桥
题目 934. 最短的桥 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域. 岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连.grid ...
- 【934. 最短的桥】
来源:力扣(LeetCode) 描述: 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域. 岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其 ...
- Leetcode最短的桥
934. 最短的桥 思路:先通过任意搜索方法找到其中一个岛屿 然后利用广度优先搜索,查找其与另一个岛屿的最短距离. class Solution {public:vector<int> d ...
- LeetCode 244. 最短单词距离 II(哈希map+set二分查找)
文章目录 1. 题目 2. 解题 2.1 暴力超时 2.2 哈希表+set二分查找 1. 题目 请设计一个类,使该类的构造函数能够接收一个单词列表. 然后再实现一个方法,该方法能够分别接收两个单词 w ...
- LeetCode 245. 最短单词距离 III
文章目录 1. 题目 2. 解题 1. 题目 给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离. word1 和 word2 是有可能相同的,并且它们将分别表 ...
- LeetCode 243. 最短单词距离
文章目录 1. 题目 2. 解题 1. 题目 给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离. 示例: 假设 words = ["practice ...
- LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序 ...
- LeetCode 214. 最短回文串(字符串哈希)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...
最新文章
- C_functions
- ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册
- macOS下加载动态库dylib报code signature invalid错误的解决办法
- 卡号身份证过期的影响
- bccomp在php中什么意思,PHP bccomp()用法及代码示例
- Pyhton随机生成测试数据模块faker
- mysql 用户与权限
- GTK+图形化应用程序开发学习笔记(一)—概述
- 「leetcode」98. 验证二叉搜索树:中序遍历【递归】【迭代】详解
- 深入浅出数据分析(一)——MySQL+EXCEL+R统计问卷调查
- matlab画奇异吸引子,第四节 混沌理论和奇异吸引子
- STM32F407 ETR 计数程序
- 中国参与MOOC 建设的大学有多少所?
- MikTex+texworks插入数学公式示例
- 如何直接从TI官方获得芯片的原理图和封装
- html的css样式大全,css样式有哪些?
- 【数据库数据恢复】Sql Server数据库数据恢复案例
- Android实现音乐播放器(包含窗口小组件)
- 我的周刊(第009期)
- java通过容联云通讯实现发送短信验证码
热门文章
- MCS:连续随机变量——均匀分布和指数分布
- codeforces 918 D MADMAX 记忆化搜索
- 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!
- Cypress使用教程
- 4个睡眠中的“小动作”,暴露了你的身体状况
- python爬取网页数据总结_python之爬取网页数据总结(一)
- 20155322 2016-2017-2 《Java程序设计》第8周学习总结
- 苹果鼠标怎么连接_用手机连接鼠标和键盘的方法(安卓和苹果都可以)
- php没有错误信息,php – 如何调试没有错误信息的错误?
- 在ARM开发板上安装OpenCV4.5.1