2013-12-16 5 views
2

Здравствуйте, я пытаюсь написать программу решения лабиринта в python с использованием алгоритма формы волны (explained here). Я использую вложенные петли для прокрутки матрицы и изменяю числа, такие как in this animated 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 

ответ

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 
Смежные вопросы