输入n,m,并且输入一个n*m的01矩阵,计算出每个元素离它最近的1的距离。请帮我写这样的代码
时间: 2024-09-07 22:03:06 浏览: 46
距离矩阵计算:用于计算一组点的距离的紧凑程序,以矩阵中的行给出。-matlab开发
这是一个典型的二维数组操作问题,通常可以用广度优先搜索(BFS)算法来解决。这里我会提供一个简单的Python代码示例:
```python
from collections import deque
def shortest_distance(matrix):
n, m = len(matrix), len(matrix[0])
# 初始化距离矩阵,所有元素设为 inf(无穷大),边界值设为0
dist_matrix = [[float('inf')] * m for _ in range(n)]
visited = set()
# 定义四个方向的邻居坐标
directions = [(0, -1), (0, 1), (-1, 0), (1, 0)]
# 从左上角开始,0表示当前位置是1
if matrix[0][0] == 1:
dist_matrix[0][0] = 0
queue = deque([(0, 0)])
while queue:
i, j = queue.popleft()
# 遍历四个方向
for direction in directions:
ni, nj = i + direction[0], j + direction[1]
# 如果越界或已经是1,则跳过
if not (0 <= ni < n and 0 <= nj < m) or matrix[ni][nj] != 1:
continue
# 更新当前节点到最近1的距离,并标记为已访问
new_dist = dist_matrix[i][j] + 1
if new_dist < dist_matrix[ni][nj]:
dist_matrix[ni][nj] = new_dist
queue.append((ni, nj))
# 如果当前位置是1,跳出循环
if matrix[i][j] == 1:
break
return dist_matrix
# 示例
matrix = [[0, 0, 1], [0, 1, 0], [0, 0, 0]]
print(shortest_distance(matrix))
```
这个代码首先创建一个与原矩阵大小相同的“距离矩阵”,用于存储每个元素到最近1的距离。然后使用队列进行BFS遍历,每次迭代更新邻近位置的距离。当遇到1的时候,就停止搜索。
阅读全文