广度优先搜索判断距离 542. 01 矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1:
输入:
0 0 0
0 1 0
0 0 0
输出:
0 0 0
0 1 0
0 0 0
示例 2:
输入:
0 0 0
0 1 0
1 1 1
输出:
0 0 0
0 1 0
1 2 1
注意:
给定矩阵的元素个数不超过 10000。
给定矩阵中至少有一个元素是 0。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。

题解

广度优先搜索。广度优先搜索需要一个辅助的队列,每次将搜索过的点append到队列最后,然后弹出队列最前面的坐标进行搜索。本题还需要求距离,所以需要在队列的坐标中添加距离。

class Solution(object):
    def updateMatrix(self, matrix):
        # import collections
        # 广度优先算法
        # 使用一个辅助的队列,当队列不为空时可以一直进行广度搜索 
        # 这种需要计算距离的需要将距离添加到队列的坐标后面,每使用一次这个坐标,距离增加1
        row = len(matrix)
        col = len(matrix[0])
        grids = [[0, -1], 
                [0, 1], 
                [-1, 0], 
                [1, 0]]
        def bfs(visited, queue):
            while queue:
                x, y, length = queue.pop(0)
                for grid in grids:
                    new_x, new_y = x + grid[0], y + grid[1]
                    if -1<new_x<row and -1<new_y<col and [new_x, new_y] not in visited:      
                        if matrix[new_x][new_y]==0:
                            return length+1 
                        visited.append([new_x, new_y])
                        queue.append([new_x, new_y, length + 1]) 

        for i in range(row):
            for j in range(col):
                if matrix[i][j]!=0:
                    visited = [[i, j]]
                    queue = [[i, j, 0]]
                    dist = bfs(visited, queue)
                    matrix[i][j] = dist 

        return matrix
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值