2013-07-21 4 views
0

Я работаю над проблемой решения лабиринта. После того, как код может найти цель, я не мог позволить python распечатать список решений. Но это необходимо для домашней работы.Как заставить мою функцию лабиринта распечатать решение

Может кто-нибудь мне помочь? Я только что изучил питон в течение 3 недель. Я хочу распечатать каждый шаг, который питон переходит к Конечной цели. Вот мой код:

def mazeDetector(row,col): 
    c= m[row][col] 
    solution=[] 

    if c =="W": 
     print "Wall here: "+ str(row)+ ","+ str(col) 
     return False 
    elif c =="V": 
     print "Visited: " + str(row)+ ","+ str(col) 
     return False 
    elif c=="F": 
     print "Found: "+ str(row)+ ","+ str(col) 
     print solution 
     return True 

    print "visiting:"+ str(row)+ ","+ str(col) 
    solution.append((row,col),) 
    m[row][col]=="V" 
    if (col>0 and mazeDetector(row,col-1)): 
     return True 
    elif (row< len(m)-1 and mazeDetector(row+1,col)): 
     return True 
    elif (row>0 and mazeDetector(row-1, col)): 
     return True 
    elif (col<=len(m)-1 and mazeDetector(row, col+1)): 
     return True 
    return False 
mazeDetector(1,5) 

А вот лабиринт, W означает стену, P означает место, чтобы пойти, S средства запуска, F означает окончательное:

[['W', 'P', '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']] 

ответ

1

вы должны передать решение в вашу функцию, а не создавать его каждый раз:

def mazeDetector(row,col, solution): 
    c= m[row][col] 
    solution.append((row, col)) 
    if c =="W": 
     print "Wall here: "+ str(row)+ ","+ str(col) 
     return False 
    elif c =="V": 
     print "Visited: " + str(row)+ ","+ str(col) 
     return False 
    elif c=="F": 
     print "Found: "+ str(row)+ ","+ str(col) 
     print solution 
     return True 

    print "visiting:"+ str(row)+ ","+ str(col) 
    m[row][col]=="V" 
    if (col>0 and mazeDetector(row,col-1, list(solution))): 
     return True 
    elif (row< len(m)-1 and mazeDetector(row+1,col, list(solution))): 
     return True 
    elif (row>0 and mazeDetector(row-1, col, list(solution))): 
     return True 
    elif (col<=len(m)-1 and mazeDetector(row, col+1, list(solution))): 
     return True 
    return False 
mazeDetector(1,5, []) 

вот код, который возвращает путь, если он существует

def mazeDetector(row, col, solution): 
    solution.append((row, col)) 
    if m[row][col] == "F": return True, solution 
    m[row][col] = "V" 
    neighbors = [(row, col - 1), (row + 1, col), (row - 1, col), (row, col + 1)] 
    neighbors = filter(lambda (r, c): r >= 0 and c >= 0 and r < len(m) and c < len(m) and m[r][c] not in ("V", "W"), neighbors) 
    for r, c in neighbors: 
     t, sol = mazeDetector(r, c, list(solution)) 
     if t: return True, sol 
    return False, [] 

print mazeDetector(1, 5, [])[1] 
+0

Большое спасибо! –

+0

а как я могу позволить mazeDectector вернуть решение? –

+0

Вы можете использовать кортеж вашего текущего результата и решения –

0

Вы могли бы просто заменить «P-х на вашем фактическом разрешенном маршруте с другим символом, возможно, «g» для Go this way!

+0

как бы я позволил mazeDectector вернуть решение? –

+0

return found и либо решение, либо результаты вызова как тапочки. –

Смежные вопросы