1. 题目描述
在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大
组。)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。返回必须翻转的 0 的最小数目。(可以保证答案至少是 1。)
  1. 题解
等同于求两个岛屿之间的最近距离,使用广度优先搜索。
  1. 代码

class Solution {public:void dfs(vector<vector<int>>& A,int x,int y,int m,int n){if (x<0||x>=m||y<0||y>=n) return;que.push({x,y});for (int k=0;k<4;k++){int xx=x+d[k][0];int yy=y+d[k][1];if (xx<0||xx>=m||yy<0||yy>=n||A[xx][yy]!=1) continue;A[xx][yy]=2; // 标记当前位置已经访问过dfs(A,xx,yy,m,n);}}int bfs(vector<vector<int>>& A,int m,int n){int res=0;while (!que.empty()){int cnt=que.size();for (int i=0;i<cnt;i++){int x=que.front().first;int y=que.front().second;que.pop();for (int k=0;k<4;k++){int xx=x+d[k][0];int yy=y+d[k][1];if (xx<0||xx>=m||yy<0||yy>=n||A[xx][yy]==2) continue;if (A[xx][yy]==1) return res;A[xx][yy]=2; // 标记当前位置已经访问过que.push({xx,yy});}}res++;}return res;}int shortestBridge(vector<vector<int>>& A) { int m=A.size();if (!m) return 0;int n=A[0].size();if (!n) return 0;bool flag=false;for (int i=0;i<m;i++){for (int j=0;j<n;j++){if (A[i][j]){flag=true;A[i][j]=2;dfs(A,i,j,m,n);break;}}if (flag) break;}return bfs(A,m,n);}int d[4][2]={0,1,1,0,0,-1,-1,0};queue<pair<int,int>> que;
};

LeetCode 934 最短的桥相关推荐

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

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

  2. 【LeetCode】934. 最短的桥

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

  3. 【934. 最短的桥】

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

  4. Leetcode最短的桥

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

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

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

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

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

  7. LeetCode 243. 最短单词距离

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

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

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

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

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

最新文章

  1. C#之windows桌面软件第五课:串口助手实现定时关闭设备、鼠标移动使按钮颜色变化功能
  2. 瑞星linux u盘引导盘杀毒教程,瑞星杀毒U盘怎样用U盘启动电脑
  3. shell脚本应用(二)
  4. java泛型的作用和实现原理_java泛型的作用及实现原理
  5. 【Java面试题视频讲解】字符串按指定长度分隔
  6. 五、开始Github和码云之旅,新手如何上路
  7. 使用 Visual Studio Code SQLite 扩展来浏览 SAP Cloud Application Programming 数据库
  8. Why settype table is used in Genil component implementation
  9. mysql 事务 数量_MySQL 数据查询语言(DQL) 事务控制语言(TCL)详解
  10. 1.1.0-简介-P4-一致性、2PC和3PC
  11. 【Daily Scrum】
  12. oracle对象不在回收站中,Oracle PURGE子句清除回收站中的对象
  13. (转)wxWindows一些网文
  14. dlna 斐讯r1怎么用_DLNA加持,斐讯R1说学逗唱样样行
  15. 这台计算机无法连接usb,爱思助手无法连接或者连接超时解决办法
  16. 机器学习全系列经典书籍推荐
  17. 计算机用户名,账户名更改
  18. 新手学习电脑知识的一些方法
  19. 从你的全世界路过(张嘉佳)
  20. 为什么单片机管脚设计成低电平才有效

热门文章

  1. mysql 索引 测试_mysql的索引测试
  2. mysql mongodb b树_为何Mongodb索引用B树,而Mysql用B+树?
  3. .bin 文件用excel文件打开_用python读Excel文件
  4. OpenCV中直方图均衡化
  5. 图像处理包magick - R版的PS - 学习笔记
  6. NGS基础 - 参考基因组和基因注释文件
  7. 怎么设置电脑壁纸_电脑怎么设置双屏或多屏显示?
  8. RTX5 | 软件定时器01 - 创建一个软件定时器(单次运行)
  9. 工厂电子产品工艺文件_建智能工厂,人机如何达到最佳组合?
  10. input输入框禁止自动补全和下拉提示