20190712-01矩阵的解题思考
2019-07-24 09:21:05来源:博客园 阅读 ()
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。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。
题目转载于Leetcode。
算法
- 记录Q =矩阵所有的值为0的节点
- 将值为0的节点看作已处理过的节点,记录visited = set(Q)
- 当Q不为空的时候依次从Q的左边取节点对取到的节点做以下判断:
a) 节点的上下左右领结点是否合法存在(即是否越界)
b) 如果上下左右节点存在,判断其是否已被更新
c) 如果即存在又没有被更新,则更新其节点值为当前取到的节点值+1,即任何0节点上下左右的领结点到0的距离为1,更新后将更新后的节点加入Q和Visted里面。加入Q里面是为了一层一层的更新远端节点的距离,加入Visited是为了以防后续被更新
代码
def updateMatrix(matrix): matrix_length = len(matrix) if matrix_length < 1: return matrix row_length = len(matrix[0]) queue = [] visited = set() for i in range(matrix_length): for j in range(row_length): if matrix[i][j] == 0: queue.append((i, j))#找到所有的0结点 visited.add((i, j))#将0节点看作已经被更新的节点visited while queue: i, j = queue.pop(0) for x, y in [(i + 1, j), (i - 1, j), (i, j + 1), (i, j - 1)]: # 下上右左4个节点,0的上下左右到0的距离都为1 if 0 <= x < matrix_length and 0 <= y < row_length and (x, y) not in visited: # x,y范围区间在矩阵边界值以内,且未被更新 matrix[x][y] = matrix[i][j] + 1 visited.add((x, y)) queue.append((x, y)) return matrix
原文链接:https://www.cnblogs.com/hyj691001/p/11178301.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 矩阵的运算:Python语言实现 2019-07-24
- 20190524-矩阵算法,矩阵相加,矩阵相乘,矩阵转置等 2019-05-24
- 科学计算库Numpy——排序 2019-04-11
- 科学计算库Numpy——数值计算 2019-04-11
- 20190110-用笨办法找到二维矩阵的鞍点 2019-01-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash