python - 仅打印迷宫的正确路径
问题描述
我有一些递归解决迷宫的代码。在列表列表中,“x”代表路径,“w”代表墙,“+”代表访问过的单元格。我只想写正确的路径,但我的函数会写每条路径,即使它是死胡同。你能告诉我我在这里缺少什么吗?下面你可以看到我的一些代码:
mainMaze = [['W', 'W', 'P', 'W', 'W', 'W'],
['W', 'W', 'P', 'W', 'P', 'S'],
['W', 'W', 'P', 'W', 'P', 'W'],
['P', 'P', 'P', 'P', 'P', 'W'],
['F', 'W', 'P', 'W', 'W', 'W'],
['W', 'P', 'P', 'P', 'P', 'W']]
def printMaze(maze):
for line in maze:
for element in line:
print(element, end=" ")
print()
def pathCheck(row, col):
print(str(row) + "," + str(col))
if mainMaze[row][col] == "F": # F is exit
mainMaze[i][j] == "0"
return True
elif mainMaze[row][col] == "W": # W is wall
return False
elif mainMaze[row][col] == "+": # + is visited
return False
elif mainMaze[row][col] == "P": # + is visited
mainMaze[row][col] = "+"
mainMaze[i][j] == "0"
if ((row < len(mainMaze) - 1 and pathCheck(row + 1, col))
or (col > 0 and pathCheck(row, col - 1))
or (row > 0 and pathCheck(row - 1, col))
or (col < len(mainMaze) - 1 and pathCheck(row, col + 1))):
return True
return False
for i in range(len(mainMaze)):
for j in range(len(mainMaze)):
if mainMaze[i][j] == "S":
a, k = i, j
pathCheck(a, k)
printMaze(mainMaze)
解决方案
如前所述,如果您提供一个完整的工作示例,您将获得更准确的答案并且可能更快。
无论如何,我做了几个猜测,我希望这是你的用例。
如果您print(str(row) + "," + str(col))
在开头添加pathCheck
,您将看到有什么问题。
现在考虑一下:
mainMaze = [
["X", "X", "A"],
["W", "X", "X"],
["W", "X", "G"]
]
def pathCheck(row, col):
print(str(row) + "," + str(col))
if mainMaze[row][col] == "G": # F is exit
return True
elif mainMaze[row][col] == "W": # W is wall
return False
elif mainMaze[row][col] == "+": # + is visited
return False
elif mainMaze[row][col] == "X": # X is path
mainMaze[row][col] = "+"
if ((row < len(mainMaze) - 1 and pathCheck(row + 1, col))
or (col > 0 and pathCheck(row, col - 1))
or (row > 0 and pathCheck(row - 1, col))
or (col < len(mainMaze) - 1 and pathCheck(row, col - 1))
or (col < len(mainMaze) - 1 and pathCheck(row, col + 1))):
return True
return False
它将打印:
0,0
1,0
0,-1 // wrong
0,1
1,1
2,1
2,0
1,1
2,0
2,2
负索引将变为并且在这种情况下被转换为 (0,2)。它会产生不想要的结果。
原因是col < len(mainMaze) - 1 and pathCheck(row, col - 1)
如果col
为 0 则满足第一个条件,然后它将到达(行,-1)。
如果这不是您的代码中的问题(这绝对是一个编码问题和潜在的错误),那么您需要发布一个包含矩阵的完整示例。
推荐阅读
- javascript - 一个基本的 JavaScript 字符串比较问题
- substrate - 基材 - 最终确定为零
- javascript - 实现自动完成下拉菜单不起作用
- kodi - 有没有办法找到我的 Kodi 安装使用的 python 版本?
- javascript - 如何在 Fluent UI 中正确使用 Modal
- python - 如何使用基于类别的分组将数据框导出到 Excel 工作表
- php - 使用数组映射根据PHP中的数组列表求和和减去
- javascript - 为什么找不到显示属性?(更多下文)
- python - AttributeError:模块“tensorflow.keras.mixed_precision”没有属性“set_global_policy”
- python - 有没有办法用另一个替换列表中的索引?