Google Foo.bar可破墙迷宫A*搜索隐藏测试用例失败求助
排查方向
- 修复重复计算问题:你当前的
shortest_path函数连续两次调用了A*求解逻辑,大尺寸迷宫下会直接翻倍运行耗时,极容易触发Foo.bar的时间限制导致用例判定失败。直接把运行结果存到临时变量再判断即可,参考修改:
def shortest_path(maze): path = astar_with_1_breakable_wall(maze) return len(path) if path else -1
- 优化开放列表的操作效率:你当前每次取f值最小节点、删除节点都要遍历整个开放列表,复杂度是O(n),迷宫尺寸稍大就会卡顿。可以改用Python内置的
heapq模块实现优先队列,把操作复杂度降到O(logn),大幅提升运行速度。 - 补充小尺寸边界用例测试:你本地全量遍历测试只覆盖了边长≥6的迷宫,遗漏了边界场景,建议补充测试:
- 1x1网格
[[0]],预期返回1 - 2x2网格
[[0,1],[1,0]],预期返回3 - 单行长条形迷宫
[[0,1,1,0]],预期返回4
- 1x1网格
- 优化启发式函数:你用的欧氏距离取上界虽然满足A的可采纳性要求,但四方向移动的网格场景下,曼哈顿距离是更紧的下界,可以减少A遍历的节点数,进一步提升效率,修改参考:
self.h = abs(end.pos[0] - self.pos[0]) + abs(end.pos[1] - self.pos[1])
内容的提问来源于stack exchange,提问作者altruios
相关产品推荐
相关产品推荐

