2

您好,我正在尝试使用波形算法(在此处解释)在 python 中编写迷宫求解程序。我正在使用嵌套循环来循环遍历矩阵并更改此动画 gif 中的数字。

然而,它似乎只是循环通过我的矩阵的第一行,而不是移动到其余部分。我已经盯着这个东西看了很长一段时间,我希望对它有一些新的看法会有所帮助。

谢谢,洛根

floorMap = [[000,000,000,000,000,999,999,999,999,999],
           [000,000,999,000,999,000,000,000,999,999],
           [000,000,999,000,999,000,000,000,999,999],
           [000,000,000,000,999,000,000,000,999,999],
           [999,000,000,000,999,000,999,999,999,999],
           [999,000,000,000,000,000,999,000,000,999],
           [999,000,000,000,999,999,999,000,000,999],
           [999,000,999,000,000,000,999,000,000,999],
           [999,000,999,999,999,000,000,000,000,999],
           [999,999,999,999,999,999,999,999,000,000]]
robotX=0
robotY=0

goalX=9
goalY=9

currentNum=0

wall=999
uncalculated=000

floorMap[robotX][robotY]=1


def changeSurroundings(X, Y):
    #left
    if(floorMap[X-1][Y]==000):
        floorMap[X-1][Y]=currentNum   
    #right 
    if(floorMap[X+1][Y]==000):
        floorMap[X+1][Y]=currentNum  
    #up
    if(floorMap[X][Y-1]==000):
        floorMap[X][Y-1]=currentNum  
    #down
    if(floorMap[X][Y+1]==000):
        floorMap[X][Y+1]=currentNum    

def printMap():
    i=0
    while(i<len(floorMap)):
        print floorMap[i]
        print ""
        i+=1
    print ""
    print ""



#------------------THIS IS WHERE THE PROBLEM IS--------------

while(floorMap[goalX][goalY]==0):
    x=0
    y=0
    while(x<len(floorMap[0])):
        while(y<len(floorMap)):
            if(floorMap[x][y] > 000 and floorMap[x][y] < 999):
                currentNum=floorMap[x][y]+1
                changeSurroundings(x,y)
                printMap()

            y+=1
        x+=1
4

1 回答 1

2
x=0
y=0
while(x<len(floorMap[0])):
    while(y<len(floorMap)):
        ...
        y+=1
    x+=1

这里的问题是,一旦内部循环耗尽了y值,它将被耗尽,直到外部循环完成,因为您不会y为每个内部循环重置。

只需将y=0线移到外循环中:

x=0
while(x<len(floorMap[0])):
    y=0
    while(y<len(floorMap)):
        ...
        y+=1
    x+=1
于 2013-12-16T09:01:10.130 回答