给定一个n*m的网格地图,格子有三种情况: 1. ‘.’表示空,可以正常通行 2. ‘#’表示有墙,不能通行 3. 大写英文字母(a~z) 表示有陷阱, 可以通行,代码
时间: 2024-09-27 16:10:12 浏览: 235
当你面对一个 n * m 的网格地图问题,其中包含 '.'(空地)、'#'(墙壁) 和大写字母 (a~z) 的陷阱时,通常需要设计一个算法来处理路径查找。这种问题常常属于图搜索范畴,比如经典的深度优先搜索 (DFS) 或广度优先搜索 (BFS),或者是更高级的 A* 搜索算法。
以下是一个简单的 Python 示例,使用二维列表来表示网格,以及函数 `dfs` 实现基于深度优先搜索的遍历:
```python
def is_valid_char(char):
return char.isalpha()
def can_pass(char):
return is_valid_char(char) and char.lower() != 'z'
def dfs(grid, start, end, visited=None):
if visited is None:
visited = set()
if start == end or (start[0], start[1]) in visited:
return True
visited.add(start)
directions = [(0, -1), (-1, 0), (0, 1), (1, 0)] # 上下左右四个方向
for dx, dy in directions:
x, y = start[0] + dx, start[1] + dy
if 0 <= x < len(grid) and 0 <= y < len(grid[0]) and \
grid[x][y] in ('.', chr(ord('a') + (grid[start[0]][start[1]].lower() - 'a' + 1))):
if dfs(grid, (x, y), end, visited):
return True
return False
# 使用示例
grid = [['#', '.', 'a'], ['b', '#', '.'], ['#', '.', 'c']]
start = (0, 0)
end = (2, 2)
if dfs(grid, start, end):
print("从起始点到终点存在路径")
else:
print("不存在路径")
阅读全文
相关推荐


















