给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 1 的距离。 两个相邻元素间的距离为 1 。
时间: 2024-09-07 18:02:47 浏览: 22
这个问题可以通过广度优先搜索(BFS)算法来解决。首先,我们需要找出矩阵中所有值为1的元素的位置,然后从这些位置开始,对矩阵中的每个元素进行广度优先搜索。在搜索过程中,我们需要记录每个元素到最近的1的距离。以下是一个可能的算法步骤:
1. 遍历矩阵,找出所有值为1的元素的位置。
2. 将所有值为1的元素的位置加入到一个队列中。
3. 初始化一个同样大小的矩阵,用于记录每个元素到最近1的距离,初始值设为一个足够大的数(如矩阵大小的最大值)。
4. 从队列中取出位置,将其周围的元素(如果是0,则将其值更新为当前位置的距离加1)加入队列,并更新这些元素的距离。
5. 重复步骤4,直到队列为空。
6. 队列为空时,我们得到的矩阵就是每个元素到最近1的距离矩阵。
下面是这个算法的伪代码实现:
```python
def update_matrix(mat):
rows, cols = len(mat), len(mat)
dist = [[float('inf')] * cols for _ in range(rows)]
queue = []
# 初始化队列和距离矩阵
for r in range(rows):
for c in range(cols):
if mat[r][c] == 1:
queue.append((r, c))
dist[r][c] = 0
# 四个方向的移动:上、下、左、右
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
# 广度优先搜索
while queue:
r, c = queue.pop(0)
for dr, dc in directions:
nr, nc = r + dr, c + dc
# 检查新位置是否在矩阵内,并且是否可以更新距离
if 0 <= nr < rows and 0 <= nc < cols and dist[nr][nc] > dist[r][c] + 1:
dist[nr][nc] = dist[r][c] + 1
queue.append((nr, nc))
return dist
# 示例
mat = [
[0, 0, 0],
[0, 1, 0],
[0, 0, 0]
]
print(update_matrix(mat))
```
这段代码会返回一个新的矩阵,其中每个元素表示原矩阵对应位置到最近的1的距离。