542。01矩阵题目来源:https://leetcode-cn.com/problems/01-matrix题目给定一个由0和1组成的矩阵,求距离最近的0。两个相邻元素之间的距离为1。例1:输入:000010000输出:000010000例2:输入:000010111输出:000010121注:a中的元素个数给定矩阵的个数不超过10000。给定矩阵中至少有一个元素为0。矩阵中的元素仅在四个方向上相邻:上、下、左、右。解题思路:广度优先搜索可以从0的位置开始进行广度优先搜索。将0视为源点,将它们全部入队,并将每个0扩散到1(其中每个1都被离它最近的0扩散)。扩散时需要注意的是,在返回的矩阵中,可以在对应的坐标中设置距离值,同时可以标记是否被访问过。需要注意的是0元素的距离为0,构造返回矩阵时,默认初始值为0,此时可以直接将源点0放入标记部分。有关详细信息,请参见下面的代码实现。代码实现类解决方案:defupdateMatrix(self,matrix:List[List[int]])->List[List[int]]:m,n=len(matrix),len(matrix[0])#构建返回矩阵ans=[[0]*nfor_inrange(m)]#首先找到所有源点0的位置zero=[(i,j)foriinrange(m)forjinrange(n)ifmatrix[i][j]==0]#将所有源点0放入队列fromcollectionsimportdequequeue=deque(zero)#mark#这里将源点0的位置添加到mark#因为距离sourcepoint0is0#不可更改,返回矩阵默认初始值为0sign=set(queue)#待扩散的四个方向directions=[(0,1),(1,0),(0,-1),(-1,0)]whilequeue:#退出队列并传播i,j=queue.popleft()fordi,djindirections:ni,nj=i+di,j+dj如果0<=ni
