Python 只打印迷宫的正确路径
ı有一些递归求解迷宫的代码。在列表列表中,“x”表示路径,“w”表示墙,“+”表示访问的单元。我只想写正确的路径,但我的函数会写每一条路径,即使它是一条死胡同。你能告诉我我在这里遗漏了什么吗?下面你可以看到我的一些代码:Python 只打印迷宫的正确路径,python,python-3.x,Python,Python 3.x,ı有一些递归求解迷宫的代码。在列表列表中,“x”表示路径,“w”表示墙,“+”表示访问的单元。我只想写正确的路径,但我的函数会写每一条路径,即使它是一条死胡同。你能告诉我我在这里遗漏了什么吗?下面你可以看到我的一些代码: mainMaze = [['W', 'W', 'P', 'W', 'W', 'W'], ['W', 'W', 'P', 'W', 'P', 'S'], ['W', 'W', 'P', 'W', 'P', '
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)
mainMaze=[[W',W',P',W',W',W'],
[W',W',P',W',P',S'],
[W',W',P',W',P',W'],
[P',P',P',P',P',P',W'],
[F',W',P',W',W',W'],
['W','P','P','P','P','W']
def打印迷宫(迷宫):
对于迷宫中的线:
对于行中的元素:
打印(元素,结束=“”)
打印()
def路径检查(行、列):
打印(str(行)+“,”+str(列))
如果mainMaze[row][col]=“F”:#F退出
mainMaze[i][j]=“0”
返回真值
elif mainMaze[row][col]=“W”:#W是墙
返回错误
elif mainMaze[row][col]=“+”:#+已被访问
返回错误
elif mainMaze[row][col]=“P”:#+已被访问
主迷宫[行][列]=“+”
mainMaze[i][j]=“0”
if((行<列(主迷宫)-1和路径检查(行+1,列))
或(列>0和路径检查(行,列-1))
或(行>0和路径检查(行-1,列))
或(列<列(主迷宫)-1和路径检查(行,列+1)):
返回真值
返回错误
对于范围内的i(len(mainMaze)):
对于范围内的j(len(mainMaze)):
如果mainMaze[i][j]=“S”:
a、 k=i,j
路径检查(a,k)
打印迷宫(主迷宫)
如前所述,如果您提供一个完全有效的示例,您将获得更准确的答案,而且可能会更快
无论如何,我做了一些猜测,我希望这是您的用例
如果在路径检查的开头添加print(str(row)+“,“+str(col))
,您将看到哪里出了问题
现在考虑一下:
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,2),在这种情况下,将转换为(0,2)。它会产生不想要的结果
原因是col
,其中如果col
为0,则满足第一个条件,然后它将到达(row,-1)
如果这不是您的代码中的问题(这肯定是一个编码问题和潜在的bug),那么您需要发布一个完整的示例,包括矩阵。您是否也可以发布打印功能?此外,最后一次检查中的第四条语句未添加correctprint函数。先生,你能解释一下为什么这是错误的吗?你应该提供一个有效的例子来获得你需要的帮助:张贴你在问题中提到的例子。应该有一个例子,您发现您的代码正在打印所有路径
0,0
1,0
0,-1 // wrong
0,1
1,1
2,1
2,0
1,1
2,0
2,2