// 多源广度优先搜索
// 重点是全部值为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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。