leetcode934.ShortestBridge
转自:https://www.unclegem.cn/2018/11/07/Leetcode学习笔记-934-最短的桥/
题目:在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)
现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。
返回必须翻转的 0 的最小数目。(可以保证答案至少是 1。)
简单来说,就是把矩阵中所有的1连接起来
思路:先利用dfs找到其中的两块岛屿,将其中的一块所有的陆地标记改为2,
然后将另一块岛屿中的所有陆地添加到一个队列进行bfs,对于队列中的每一个陆地判断四周方向,
若遇到标记为2的陆地则代表相连了,若遇到标记为1的陆地,则继续判断,若遇到标记为0的水,
则将该块标记为1并添加到队列中,代表陆地向该方向搭了一块桥,就这样不断bfs,直到其中
某一块岛屿或者桥四周遇到了标记为2的陆地,即代表两座岛屿连通了,这样我们队列元素
更新了几个周期即代表桥长为几。
class Solution {public int shortestBridge(int[][] A) {boolean found = false ;int createBridge = 0 ;Queue<int[]> queue = new LinkedList<>() ;int [][] directions = new int[][]{{0,1},{1,0},{0,-1},{-1,0}} ;//dfs区分开两个小岛for(int i=0;i<A.length;i++){for(int j=0;j<A[0].length;j++){if(!found&&A[i][j]==1){dfs(A, i, j) ;found = true ;}if(found&&A[i][j]==1){queue.offer(new int[]{i,j}) ;}}}//bfs建桥直两个岛屿相连接while(!queue.isEmpty()){int size = queue.size() ;for(int i=0;i<size;i++){int point[] = queue.poll() ;for(int[] direction :directions){int x = point[0] + direction[0] ;int y = point[1] + direction[1] ;if(x<0||x>=A.length||y<0||y>=A[0].length||A[x][y]==1){continue;}else if(A[x][y] == 2){return createBridge ;}else{A[x][y] = 1 ;queue.offer(new int[]{x,y}) ;}}}createBridge ++ ;}return 1 ;}public void dfs(int A[][], int x, int y){if(x<0||x>= A.length||y<0||y>=A[0].length||A[x][y]==2||A[x][y]==0){return;}A[x][y] = 2 ;dfs(A, x+1, y) ;dfs(A, x-1, y) ;dfs(A, x, y+1) ;dfs(A, x, y-1) ;}
}
leetcode934.ShortestBridge相关推荐
- [Swift]LeetCode934. 最短的桥 | Shortest Bridge
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- leetcode934. 最短的桥(dfs+bfs)
在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大组.) 现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛. 返回必须翻转的 0 的最小数目.(可以保证答 ...
- 《搜索算法——DFS、BFS、回溯》
目录 深搜 200. 岛屿数量 695. 岛屿的最大面积 130. 被围绕的区域 547. 省份数量 417. 太平洋大西洋水流问题 回溯 广搜 111. 二叉树的最小深度 752. 打开转盘锁 深搜 ...
- LeetCode 934. 最短的桥(2次BFS)
1. 题目 在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大组.) 现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛. 返回必须翻转的 0 的最小数目. ...
- LeetCode 934 最短的桥
题目描述 在给定的二维二进制数组 A 中,存在两座岛.(岛是由四面相连的 1 形成的一个最大 组.)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛.返回必须翻转的 0 的最小数目.(可 ...
- Acwing LeetCode 题目分类——配套基础课进阶课
LeetCode 题目分类--配套基础课进阶课 1.基础 二分(满足一个条件的最值问题) LeetCode33 https://leetcode.com/problems/search-in-rota ...
- 【LeetCode】934. Shortest Bridge 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS + BFS 相似题目 参考资料 日期 题目地 ...
- 【LeetCode】934. 最短的桥
题目 934. 最短的桥 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域. 岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连.grid ...
- leetcode总结
目录 1610. 可见点的最大数目 链表 合并链表 148. 排序链表 21. 合并两个有序链表 23. 合并K个升序链表 反转链表 92. 反转链表 II 206. 反转链表 143 ...
最新文章
- GNU make 和 makefile
- android 保存退出之前的页面_项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)...
- c++17进阶(2)-Lua扩展(1)
- 原型到底应该画到什么程度?被骂N次后我得出了答案
- 蚂蚁(51Nod-1266)
- matlab程序及C语言实现一维多元离散信源熵
- 计算机专业本科毕业论文周进展,周进展记录.docx
- python使用matplotlib绘图 -- barChart
- Python图片处理模块Pillow
- nao机器人学习笔记3
- 5、中小企业网络架构-核心层交换机基本配置
- CSS样式写出三角形
- 那些年,我们一起游玩过的地方
- 股票自动交易软件接口支持的语言是什么?
- IOS版aplayer使用教程_享声数播APP使用指南【ios版】
- OSChina 周日乱弹 ——我2018年的目标是什么?
- 使用OGG/Kettle实现Oracle到MySQL数据平滑迁移
- OCP学习基本知识点总结
- PPT:国内WMS厂家分析
- oracle查表空间剩余,查看Oracle表空间剩余
热门文章
- bzoj5092: [Lydsy1711月赛]分割序列
- Bootstrap-CL:按钮下拉菜单
- 让ffmpeg支持10bit编码
- url、href、src 详解
- SVD奇异值分解(PCA,LSI)
- java string转sql date_Java中的util.Date,sql.Date,sql.Time,String类型转换
- linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态
- 深度解析艾瑞咨询《2017年度中国商业智能行业研究报告》
- php筛选怎么做,thinkphp条件筛选 例子
- ES6更新的3种精简化代码,(1.速写属性 2.速写方法 3.模板字符串)