求二维列表索引越界检查的简易方案(DFS迷宫生成场景)
索引越界检查简易方案
针对每个方向的邻居,先判断索引是否在二维列表的有效范围内,再判断是否未访问(值为0):
- 左邻居:检查
x-1 >= 0,确保列索引不小于0 - 右邻居:检查
x+1 < len(map[0]),确保列索引不超过迷宫的列数(假设每行长度一致) - 上邻居:检查
y+1 < len(map),确保行索引不超过迷宫的行数 - 下邻居:检查
y-1 >= 0,确保行索引不小于0
修改后的函数代码:
def checkNeighbors(map, x, y): left = (-1, 0) right = (1, 0) up = (0, 1) down = (0, -1) clearDirs = [] rows = len(map) cols = len(map[0]) if rows > 0 else 0 # 处理空迷宫的边界情况 # 检查左邻居 if x - 1 >= 0 and map[y][x-1] == 0: clearDirs.append(left) # 检查右邻居 if x + 1 < cols and map[y][x+1] == 0: clearDirs.append(right) # 检查上邻居 if y + 1 < rows and map[y+1][x] == 0: clearDirs.append(up) # 检查下邻居 if y - 1 >= 0 and map[y-1][x] == 0: clearDirs.append(down) return clearDirs
说明:
- 先获取迷宫总行数
rows和总列数cols,避免重复计算 - 每个方向先做索引范围检查,再判断是否未访问,从根源避免索引越界
- 额外处理了空迷宫的情况,防止
len(map[0])触发报错
内容的提问来源于stack exchange,提问作者Wyatt M
相关产品推荐
相关产品推荐

