为什么不通过迷宫解决代码工作 [英] Why Wont Maze solver Code Work
问题描述
很抱歉,格式不正确,代码量很大,我只是一名初学者,不知道如何诊断错误代码量。我哪里错了,它只是返回发现空0,0并退出。我查看了其他代码,并且无法理解给出的答案,需要对此特定代码进行更详细的说明。请帮助
grid = [[T,,,#,#,# ],
[#,#,,,,#],
[#,,,#, ,#],
[#,#,#,,,#],
[#,#, ,,#,],
[#,#,#,#,#,E]]
def print_grid():
pr_grid =
用于网格中的键:
用于键中的num:
pr_grid + = str(num)
pr_grid + =
print pr_grid
pr_grid =
print pr_grid
run = True
def main(x,y ):
if grid [x] [y] ==或者grid [x] [y] ==T:
print在%d%d找到空%(x, y)
grid [x] [y] =x
elif grid [x] [y] ==#:
print在%d%d找到的墙% (x,y)
elif grid [x] [y] ==E:
print发现在%d%d出口%(x,y)
如果y < len(grid)-1:
main(x,y + 1)
if y> 0:
main(x,y - 1)
如果x < len(grid [x]) - 1:
main(x + 1,y)
if x> 0:
main(x - 1,y)
print_grid()
main(0,0)
print_grid()
比其他答案快,但如果你想返回True / False,如果你已经找到了出口,那么你可以为每个递归调用维护一个布尔值。
(另外,您的 print_grid
方法可以缩短)
def print_grid():
打印\\\
.join(''.join(row)for grid in grid)
无论如何,这里是我对程序的修改。
def main(x,y):
#检查超出界限
if y< 0或y> = len(网格):
返回False
if x< 0或x> = len(grid [y]):
返回False
if grid [x] [y] ==E:
printFound exit at%d%d%(x,y)
return True
elif grid [x] [y] ==#:
printFound d%d%d %(x,y)
返回False
elif grid [x] [y] ==或者grid [x] [y] ==T:
printFound empty在%d%d%(x,y)
grid [x] [y] =x
#没有返回,我们要继续搜索
else:#catch invalid characters
返回False
找到= False
#Bubble-up搜索出口
#的结果也通过跟踪退出来限制搜索空间被发现
,如果y < len(grid)-1而未找到:
found = main(x,y + 1)
if y> 0且未找到:
found = main(x,y - 1)
if x < len(grid [x]) - 1且未找到:
found = main(x + 1,y)
if x> 0且未找到:
found = main(x - 1,y)
找到的返回
Sorry for the bad formatting and large amount of code, I am only a beginner and do not know how to diagnose the error down to a smaller amount of code. Where am i going wrong it just returns "found empty at 0, 0" and exits. I have viewed other code under this nature and cannot understand the answers given and need more elaboration on this specific code. Please Help
grid = [["T", " ", " ", "#", "#", "#"], ["#", "#", " ", " ", " ", "#"], ["#", " ", " ", "#", " ", "#"], ["#", "#", "#", " ", " ", "#"], ["#", "#", " ", " ", "#", " "], ["#", "#", "#", "#", "#", "E"]] def print_grid(): pr_grid = "" for key in grid: for num in key: pr_grid += str(num) pr_grid += " " print pr_grid pr_grid = "" print pr_grid run = True def main(x, y): if grid[x][y] == " " or grid[x][y] == "T": print "Found empty at %d %d" % (x, y) grid[x][y] = "x" elif grid[x][y] == "#": print "Found wall at %d %d" % (x, y) elif grid[x][y] == "E": print "Found exit at %d %d" % (x, y) if y < len(grid)-1: main(x, y + 1) if y > 0: main(x, y - 1) if x < len(grid[x])-1: main(x + 1, y) if x > 0: main(x - 1, y) print_grid() main(0, 0) print_grid()
解决方案No claims as to whether this is faster than the other answer, but if you want to return True/False if you have found the exit, then you can maintain a boolean for each of the recursive calls.
(Also, your
print_grid
method can be shorter)def print_grid(): print "\n".join(' '.join(row) for row in grid)
Anyways, here are the modifications that I made to the program.
def main(x, y): # Check going out of bounds if y < 0 or y >= len(grid): return False if x < 0 or x >= len(grid[y]): return False if grid[x][y] == "E": print "Found exit at %d %d" % (x, y) return True elif grid[x][y] == "#": print "Found wall at %d %d" % (x, y) return False elif grid[x][y] == " " or grid[x][y] == "T": print "Found empty at %d %d" % (x, y) grid[x][y] = "x" # no return, we want to continue searching else: # catch invalid characters return False found = False # "Bubble-up" the results from searching for the exit # Also limit the search space by keeping track if the exit was found if y < len(grid)-1 and not found: found = main(x, y + 1) if y > 0 and not found: found = main(x, y - 1) if x < len(grid[x])-1 and not found: found = main(x + 1, y) if x > 0 and not found: found = main(x - 1, y) return found
这篇关于为什么不通过迷宫解决代码工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!