转自: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相关推荐

  1. [Swift]LeetCode934. 最短的桥 | Shortest Bridge

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. leetcode934. 最短的桥(dfs+bfs)

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

  3. 《搜索算法——DFS、BFS、回溯》

    目录 深搜 200. 岛屿数量 695. 岛屿的最大面积 130. 被围绕的区域 547. 省份数量 417. 太平洋大西洋水流问题 回溯 广搜 111. 二叉树的最小深度 752. 打开转盘锁 深搜 ...

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

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

  5. LeetCode 934 最短的桥

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

  6. Acwing LeetCode 题目分类——配套基础课进阶课

    LeetCode 题目分类--配套基础课进阶课 1.基础 二分(满足一个条件的最值问题) LeetCode33 https://leetcode.com/problems/search-in-rota ...

  7. 【LeetCode】934. Shortest Bridge 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS + BFS 相似题目 参考资料 日期 题目地 ...

  8. 【LeetCode】934. 最短的桥

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

  9. leetcode总结

    目录 1610. 可见点的最大数目 链表 合并链表 148. 排序链表    21. 合并两个有序链表   23. 合并K个升序链表 反转链表  92. 反转链表 II  206. 反转链表  143 ...

最新文章

  1. GNU make 和 makefile
  2. android 保存退出之前的页面_项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)...
  3. c++17进阶(2)-Lua扩展(1)
  4. 原型到底应该画到什么程度?被骂N次后我得出了答案
  5. 蚂蚁(51Nod-1266)
  6. matlab程序及C语言实现一维多元离散信源熵
  7. 计算机专业本科毕业论文周进展,周进展记录.docx
  8. python使用matplotlib绘图 -- barChart
  9. Python图片处理模块Pillow
  10. nao机器人学习笔记3
  11. 5、中小企业网络架构-核心层交换机基本配置
  12. CSS样式写出三角形
  13. 那些年,我们一起游玩过的地方
  14. 股票自动交易软件接口支持的语言是什么?
  15. IOS版aplayer使用教程_享声数播APP使用指南【ios版】
  16. OSChina 周日乱弹 ——我2018年的目标是什么?
  17. 使用OGG/Kettle实现Oracle到MySQL数据平滑迁移
  18. OCP学习基本知识点总结
  19. PPT:国内WMS厂家分析
  20. oracle查表空间剩余,查看Oracle表空间剩余

热门文章

  1. bzoj5092: [Lydsy1711月赛]分割序列
  2. Bootstrap-CL:按钮下拉菜单
  3. 让ffmpeg支持10bit编码
  4. url、href、src 详解
  5. SVD奇异值分解(PCA,LSI)
  6. java string转sql date_Java中的util.Date,sql.Date,sql.Time,String类型转换
  7. linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态
  8. 深度解析艾瑞咨询《2017年度中国商业智能行业研究报告》
  9. php筛选怎么做,thinkphp条件筛选 例子
  10. ES6更新的3种精简化代码,(1.速写属性 2.速写方法 3.模板字符串)