01矩阵

// 多源广度优先搜索
// 重点是全部值为0的加入,然后遍历一步,大小为1的得到。
// 再次bfs,得到距离0距离为2
// 其实这里应该建立一个map防止重复bfs的
func updateMatrix(matrix [][]int) [][]int {

n, m := len(matrix), len(matrix[0])
queue := make([][]int, 0)
for i := 0; i < n; i++ {    // 把0全部存进队列,后面从队列中取出来,判断每个访问过的节点的上下左右,直到所有的节点都被访问过为止。
    for j := 0; j < m; j++ {
        if matrix[i][j] == 0 {
            point := []int{i, j}
            queue = append(queue, point)
        } else {
            matrix[i][j] = -1
        }
    }
}
direction := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}

for len(queue) > 0 {  // 这里就是 BFS 模板操作了。
    point := queue[0]
    queue = queue[1:]
    for _, v := range direction {
        x := point[0] + v[0]
        y := point[1] + v[1]
        if x >= 0 && x < n && y >= 0 && y < m && matrix[x][y] == -1 {
            matrix[x][y] = matrix[point[0]][point[1]] + 1
            queue = append(queue, []int{x, y})
        }
    }
}

return matrix

}

作者:youaresb
链接:https://leetcode-cn.com/problems/01-matrix/solution/01ju-zheng-bfs-by-youaresb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。