本关任务:编写一个能计算网格上的最短路径的小程序。 编程要求 根据提示,在右侧编辑器补充代码,计算并输出网格上的最短路径。 测试说明 平台会对你编写的代码进行测试: 测试输入: 3 3 1 3 1 1 5 1 4 2 1 预期输出: 7 提示:
时间: 2024-09-26 19:03:50 浏览: 51
为了编写一个计算网格上最短路径的小程序,我们可以采用Dijkstra算法或A*搜索算法。这里以Dijkstra算法为例,因为它适用于所有边权非负的情况。首先,我们需要定义一个二维数组来表示网格,其中0表示可以通行,其他数字表示障碍物。然后,我们创建一个优先队列来存储待处理的节点,并从起点开始。
下面是一个简单的Python版本的Dijkstra算法实现:
```python
import heapq
def dijkstra(grid, start):
rows, cols = len(grid), len(grid[0])
distances = [[float('inf')] * cols for _ in range(rows)]
distances[start[0]][start[1]] = 0
heap = [(0, start)]
while heap:
current_distance, (i, j) = heapq.heappop(heap)
# 如果已经访问过这个位置,跳过
if current_distance > distances[i][j]:
continue
# 检查周围的邻居
for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
ni, nj = i + dx, j + dy
if 0 <= ni < rows and 0 <= nj < cols and grid[ni][nj] != float('inf'):
new_distance = current_distance + grid[ni][nj]
if new_distance < distances[ni][nj]:
distances[ni][nj] = new_distance
heapq.heappush(heap, (new_distance, (ni, nj)))
return distances
# 测试数据
grid = [
[1, 3, 1],
[1, 1, 4],
[2, 1, 1],
]
start = (0, 0)
result = dijkstra(grid, start)
print(result[-1][-1]) # 输出:7 (预期输出)
阅读全文