📅  最后修改于: 2023-12-03 15:28:08.991000             🧑  作者: Mango
曼哈顿距离是指在直角坐标系中,两点在横纵坐标上的距离之和。本篇介绍如何计算从源点到任意一个顶点的曼哈顿距离,并返回从源点到各个顶点曼哈顿距离的最小值。
本算法基于BFS(宽度优先搜索)实现,其思路如下:
以下是基于Python的实现代码片段:
from collections import deque
def min_manhattan_distance(grid: List[List[int]], start: Tuple[int, int], end: Tuple[int, int]) -> int:
m, n = len(grid), len(grid[0])
distances = [[float('inf')] * n for _ in range(m)]
queue = deque([start])
distances[start[0]][start[1]] = 0
while queue:
row, col = queue.popleft()
for r, c in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
new_row, new_col = row + r, col + c
if 0 <= new_row < m and 0 <= new_col < n and distances[new_row][new_col] == float('inf') and grid[new_row][new_col] == 0:
distances[new_row][new_col] = distances[row][col] + 1
queue.append((new_row, new_col))
return distances[end[0]][end[1]]
假设有如下迷宫:
maze = [
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]
]
其中0表示可以通过,1表示不能通过。若起点为(0, 0),终点为(3, 3),则调用min_manhattan_distance函数计算得到从起点到终点的最小曼哈顿距离为6。
本篇介绍了如何计算从源点到任意一个顶点的曼哈顿距离,并返回从源点到各个顶点曼哈顿距离的最小值的算法实现。该算法基于BFS思路实现,适用于非加权图或所有边权值相等的加权图。