美文网首页
LeetCode-python 934.最短的桥

LeetCode-python 934.最短的桥

作者: wzNote | 来源:发表于2019-08-24 13:04 被阅读0次

题目链接
难度:中等       类型: 深度优先搜索、广度优先搜索


在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)

现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。

返回必须翻转的 0 的最小数目。(可以保证答案至少是 1。)

示例1

输入:[[0,1],[1,0]]
输出:1

示例2

输入:[[0,1,0],[0,0,0],[0,0,1]]
输出:2

示例3

输入:[[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]
输出:1

解题思路


  1. 遍历数组找到第一个为1的数
  2. 以当前为1的坐标为起点进行深度优先搜索,找到第一个岛屿的全部范围,注意,每找到一个点要标记一下,以免重复寻找
  3. 以第一个岛屿的所有坐标为起点,进行广度优先搜索,找到不属于该岛的第一个1,返回到达该点所搜索的次数,就为最短的桥,注意,找过的点也要标记一下,以免重复寻找

为了不重复需搜索,可以将搜索过的点的值改为-1

代码实现

class Solution(object):
    def shortestBridge(self, A):
        """
        :type A: List[List[int]]
        :rtype: int
        """    
        n, queue = len(A), []
        def dfs(x,y):   
            A[x][y] = -1
            queue.append((x,y))
            for i, j in [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]:
                if 0<=i<n and 0<=j<n and A[i][j] == 1:
                    dfs(i, j)               
        def find_first_island():
            for i in range(n):
                for j in range(n):
                    if A[i][j] == 1:
                        dfs(i,j)
                        return
        find_first_island()
        count = 0
        while queue:
            t = []
            for x, y in queue:     
                for i, j in [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]:
                    if 0<=i<n and 0<=j<n:
                        if  A[i][j]==1:
                            return count
                        elif A[i][j]==0:   
                            A[i][j] = -1
                            t.append((i, j))                           
            count += 1
            queue = t

本文链接:https://www.jianshu.com/p/dc6780705433

相关文章

  • LeetCode-python 934.最短的桥

    题目链接难度:中等 类型: 深度优先搜索、广度优先搜索 在给定的二维二进制数组 A 中,存在两...

  • 934. 最短的桥

    题目: 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。 岛 是由四面相连的...

  • 934. 最短的桥(Python)

    难度:★★★★☆类型:数组方法:深度优先搜索,宽度优先搜索 题目 力扣链接请移步本题传送门[https://lee...

  • 魁北克大桥(转)

    全球“最短命”的大桥 魁北克大桥是加拿大的一座桥,在世界上也享有盛名。它还有个别名,被称为“史上最短命”的大桥,这...

  • leetcode第934题:最短的桥 [中等]

    题目描述 考点 深度优先搜索 广度优先搜索 解题思路 假设输入的二维数组如下,1表示陆地,0表示海洋;最短的桥.p...

  • 2019-08-12

    转:LeetCode-python 2.两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位...

  • Leetcode 934. Shortest Bridge

    文章作者:Tyan博客:noahsnail.com[http://noahsnail.com] | CSDN[ht...

  • 最短的

    如果在城市和善良之上。再加上文笔之美, 我们可以把写作的基本信仰总结为:真、善、美……

  • 最短的

    今晚和妈妈视频了说起了关于结婚的事情,妈妈问我对象谈的怎么样了,我告诉她说分了,妈妈什么也没有说,于是我又对...

  • LeetCode-python 326.3的幂

    题目链接难度:简单 类型: 数学 给定一个整数,写一个函数来判断它是否是 3 的幂次方。 示例...

网友评论

      本文标题:LeetCode-python 934.最短的桥

      本文链接:https://www.haomeiwen.com/subject/cdafectx.html