Tutorial básico de Python: Python basado en el algoritmo recursivo para lograr el problema del laberinto

@ Este artículo proviene del número público: csdn2299, me gusta prestar atención a la academia de programadores de números públicos.
Este artículo describe el problema de Python basado en el algoritmo recursivo para lograr el laberinto. Comparta con usted para su referencia, de la siguiente manera:

¿Qué es la recursividad?

La simple comprensión es que el proceso de la función llamada en sí se llama recursividad.

¿Cuándo se usa la recursión?

Si un problema puede expresarse como una operación iterativa a menor escala, se puede utilizar un algoritmo recursivo.
Problema de laberinto: en una matriz bidimensional compuesta de 0 o 1, suponga que 1 es un punto al que se puede mover y 0 es un punto que no se puede mover. Mueva una unidad en las direcciones izquierda y derecha. Cuando se mueva al borde de la matriz bidimensional, puede obtener la solución al problema. Los problemas similares se pueden llamar problemas de laberinto.

Puede usar la anidación de listas para representar una matriz bidimensional en Python. Suponiendo un laberinto de 6 * 6, el problema comienza desde las coordenadas de la matriz [3] [3], y juzga si puede salir del laberinto con éxito.

maze=[[1,0,0,1,0,1],
   [1,1,1,0,1,0],
   [0,0,1,0,1,0],
   [0,1,1,1,0,0],
   [0,0,0,1,0,0],
   [1,0,0,0,0,0]]

Para este problema de laberinto, podemos usar la idea recursiva para resolverlo bien. Para un punto en la matriz, las cuatro direcciones del punto se pueden expresar fácilmente mediante la suma y resta de las coordenadas horizontal y vertical. Cada vez que se mueve un punto móvil, todo el problema se convierte en el mismo problema que el estado inicial. Encuentre el punto que se puede mover en cuatro direcciones, sabiendo que debe moverse al borde de la matriz.

Entonces podemos codificar así:

# 判断坐标的有效性,如果超出数组边界或是不满足值为1的条件,说明该点无效返回False,否则返回True。
def valid(maze,x,y):
  if (x>=0 and x<len(maze) and y>=0 and y<len(maze[0]) and maze[x][y]==1):
    return True
  else:
    return False
# 移步函数实现
def walk(maze,x,y):
  # 如果位置是迷宫的出口,说明成功走出迷宫
  if(x==0 and y==0):
    print("successful!")
    return True
  # 递归主体实现
  if valid(maze,x,y):
    # print(x,y)
    maze[x][y]=2 # 做标记,防止折回
    # 针对四个方向依次试探,如果失败,撤销一步
    if not walk(maze,x-1,y):
      maze[x][y]=1
    elif not walk(maze,x,y-1):
      maze[x][y]=1
    elif not walk(maze,x+1,y):
      maze[x][y]=1
    elif not walk(maze,x,y+1):
      maze[x][y]=1
    else:
      return False # 无路可走说明,没有解 
  return True
walk(maze,3,3)

¡La recursión es algo bueno!

Muchas gracias por leer
. Cuando elegí estudiar Python en la universidad, descubrí que me comía una mala base informática. No tenía una calificación académica. Esto
no es nada que hacer. Solo puedo compensarlo, así que comencé mi propio contraataque fuera de la codificación. El camino, continúe aprendiendo el conocimiento central de Python, el estudio en profundidad de los conceptos básicos de la computadora, resuelto, si no está dispuesto a ser mediocre, ¡únase a mí en la codificación y continúe creciendo!
De hecho, no solo hay tecnología aquí, sino también cosas más allá de esas tecnologías. Por ejemplo, cómo ser un programador exquisito, en lugar de "seda de gallo", el programador en sí es una existencia noble, ¿no? [Haga clic para unirse] quiere ser usted mismo, quiere ser noble, vamos

Publicado 50 artículos originales · 21 alabanzas · Más de 20,000 visitas

Supongo que te gusta

Origin blog.csdn.net/chengxun03/article/details/105545232
Recomendado
Clasificación