📅  最后修改于: 2023-12-03 15:42:17.038000             🧑  作者: Mango
本题是GATE计算机科学和信息技术考试2009年的一道编程题,考查了求解迷宫最短路径的能力。迷宫的地图以二维数组的形式给出,每个位置有两种状态,可以通行或者不能通行。求解起点到终点的最短路径,并返回路径的长度。
本题可以使用广度优先搜索算法(BFS)来求解。将起点加入队列,每次从队列中取出一个点,枚举它相邻的四个方向(上、下、左、右),如果相邻点可以通行且没有被访问过,则将其加入队列,并标记为已访问过。重复此过程直到取出的点是终点为止,记录下路径长度即可。
下面是使用Python实现的代码片段,其中maze
是迷宫地图的二维数组,包含0和1两种元素,1代表障碍物,0代表可通行。
def shortest_path(maze, start, end):
queue = [(start, 0)]
visited = set([start])
while queue:
cur_pos, cur_dist = queue.pop(0)
if cur_pos == end:
return cur_dist
for next_pos in [(cur_pos[0]-1, cur_pos[1]),
(cur_pos[0]+1, cur_pos[1]),
(cur_pos[0], cur_pos[1]-1),
(cur_pos[0], cur_pos[1]+1)]:
if 0 <= next_pos[0] < len(maze) \
and 0 <= next_pos[1] < len(maze[0]) \
and next_pos not in visited \
and maze[next_pos[0]][next_pos[1]] == 0:
visited.add(next_pos)
queue.append((next_pos, cur_dist+1))
return -1
假设给出的迷宫地图如下:
0111
0000
1110
1010
0000
其中0代表可通行,1代表障碍物。起点坐标为(0, 0),终点坐标为(4, 4),则调用上面实现的函数可以得到最短路径的长度为9。
本题考查了编程人员的BFS算法求解能力,需要注意处理队列和访问记录的问题。在实现代码时要充分考虑边界条件和特殊情况,避免出现错误。