Estrutura de dados e problema em algoritmo_recursivo_maze notas em vídeo da solução python

O conceito de recursão

** Simplificando: ** Recursão significa que o método se chama, cada vez que passa em variáveis ​​diferentes. A recursão ajuda os programadores a resolver problemas complexos e simplificar o código

Regras importantes a serem resolvidas por recursão

1) Quando um método é executado, um novo espaço independente protegido (espaço de pilha) é criado.
2) As variáveis ​​locais do método são independentes e não se afetam.
3) Se o método usar uma variável de tipo de referência (como uma matriz) , tipo de referência de dados serão compartilhados para falar
4) abordagem recursiva deve retirar à condição de recursão, ou é recursão infinita, há StackflowError, recursão morto.
5) Quando um método é acabado ou retorno encontrado , retornará, observe que chamada, ele irá retornar os resultados para quem e quando executou método é completado ou devolvidos, este método também é acabado.

Problema de labirinto de recursão

Insira a descrição da imagem aqui
Explicação:
O caminho obtido pela bola está relacionado à maneira de encontrar a estratégia definida pelo programador? Ou seja :? A fim de encontrar um caminho para cima e para baixo cerca de relevante
? Quando, em seguida, obter o caminho bola, você pode usar o (inferior esquerda superior direito), e depois mudança (? Esquerda no canto inferior direito) para ver se o caminho não é uma mudança
para testar o fenômeno volta
pensamento : Como encontrar o caminho mais curto?

Código Python

'''
    // 使用递归回溯给小球找路
    // 说明:
    // map表示地图
    // 起点为(1,1)
    // 终点为(6,5)
    // map[i][j]=0为空,=1为墙,=2表示可以走,=3表示路走不通
    // 前进方向策略:下-》右->左-》上,如果走不通,就回溯
    '''
def setWay(map,i,j):
    if map[6][5]==2:
        return True
    else:
        if map[i][j]==0:
            map[i][j]=2
            if setWay(map,i+1,j):
                return True
            elif setWay(map,i,j+1):
                return True
            elif setWay(map,i-1,j):
                return True
            elif setWay(map,i,j-1):
                return True
            else:
                map[i][j]=3
                return False
        else:
            return False
            
# 先创建一个二维数组,模拟迷宫    
map = [[0 for col in range(7)] for row in range(8)]
for i in range(7):
    map[0][i]=1
    map[7][i]=1
for i in range(8):
    map[i][0]=1
    map[i][6]=1

map[3][1]=1
map[3][2]=1
map[5][3]=1
map[5][4]=1
map[5][5]=1

#输出迷宫
print("原来的迷宫----------")
for i in range(8):
    for j in range(7):
        print("%2d"%map[i][j],end='')
    print()

setWay(map,1,1)

print("找到路径后:2为走过的点,3为走过但走不通的点")
for i in range(8):
    for j in range(7):
        print("%2d"%map[i][j],end='')
    print()


Publicado 27 artigos originais · elogiado 2 · visitas 680

Acho que você gosta

Origin blog.csdn.net/qq_44273739/article/details/105167414
Recomendado
Clasificación