为什么不通过迷宫解决代码工作 [英] Why Wont Maze solver Code Work

查看:124
本文介绍了为什么不通过迷宫解决代码工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很抱歉,格式不正确,代码量很大,我只是一名初学者,不知道如何诊断错误代码量。我哪里错了,它只是返回发现空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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆