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.最短的桥相关推荐

  1. LeetCode 934. 最短的桥(2次BFS)

    1. 题目 在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大组.) 现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛. 返回必须翻转的 0 的最小数目. ...

  2. LeetCode 934 最短的桥

    题目描述 在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大 组.)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛.返回必须翻转的 0 的最小数目.(可 ...

  3. 【LeetCode】934. 最短的桥

    题目 934. 最短的桥 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域. 岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连.grid ...

  4. 【934. 最短的桥】

    来源:力扣(LeetCode) 描述:   给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域.   岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其 ...

  5. Leetcode最短的桥

    934. 最短的桥 思路:先通过任意搜索方法找到其中一个岛屿 然后利用广度优先搜索,查找其与另一个岛屿的最短距离. class Solution {public:vector<int> d ...

  6. LeetCode 244. 最短单词距离 II(哈希map+set二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力超时 2.2 哈希表+set二分查找 1. 题目 请设计一个类,使该类的构造函数能够接收一个单词列表. 然后再实现一个方法,该方法能够分别接收两个单词 w ...

  7. LeetCode 245. 最短单词距离 III

    文章目录 1. 题目 2. 解题 1. 题目 给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离. word1 和 word2 是有可能相同的,并且它们将分别表 ...

  8. LeetCode 243. 最短单词距离

    文章目录 1. 题目 2. 解题 1. 题目 给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离. 示例: 假设 words = ["practice ...

  9. LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

    581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序 ...

  10. LeetCode 214. 最短回文串(字符串哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...

最新文章

  1. C_functions
  2. ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册
  3. macOS下加载动态库dylib报code signature invalid错误的解决办法
  4. 卡号身份证过期的影响
  5. bccomp在php中什么意思,PHP bccomp()用法及代码示例
  6. Pyhton随机生成测试数据模块faker
  7. mysql 用户与权限
  8. GTK+图形化应用程序开发学习笔记(一)—概述
  9. 「leetcode」98. 验证二叉搜索树:中序遍历【递归】【迭代】详解
  10. 深入浅出数据分析(一)——MySQL+EXCEL+R统计问卷调查
  11. matlab画奇异吸引子,第四节 混沌理论和奇异吸引子
  12. STM32F407 ETR 计数程序
  13. 中国参与MOOC 建设的大学有多少所?
  14. MikTex+texworks插入数学公式示例
  15. 如何直接从TI官方获得芯片的原理图和封装
  16. html的css样式大全,css样式有哪些?
  17. 【数据库数据恢复】Sql Server数据库数据恢复案例
  18. Android实现音乐播放器(包含窗口小组件)
  19. 我的周刊(第009期)
  20. java通过容联云通讯实现发送短信验证码

热门文章

  1. MCS:连续随机变量——均匀分布和指数分布
  2. codeforces 918 D MADMAX 记忆化搜索
  3. 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!
  4. Cypress使用教程
  5. 4个睡眠中的“小动作”,暴露了你的身体状况
  6. python爬取网页数据总结_python之爬取网页数据总结(一)
  7. 20155322 2016-2017-2 《Java程序设计》第8周学习总结
  8. 苹果鼠标怎么连接_用手机连接鼠标和键盘的方法(安卓和苹果都可以)
  9. php没有错误信息,php – 如何调试没有错误信息的错误?
  10. 在ARM开发板上安装OpenCV4.5.1