Skip to content

Instantly share code, notes, and snippets.

@knkillname
Created October 31, 2017 17:58
Show Gist options
  • Save knkillname/60779628155ef113be3f6537c1c75b19 to your computer and use it in GitHub Desktop.
Save knkillname/60779628155ef113be3f6537c1c75b19 to your computer and use it in GitHub Desktop.
Laberinto por recorrido en profundidad en Python 3
# Crear un laberinto aleatorio en Python3 usando el algoritmo de
# recorrido en profundidad. El propósito de este programa es mostrar las
# características del lenguaje.
#
# Autor: Mario Abarca
# Fecha: 2017/09/07
from random import shuffle, randint # Números pseudoaleatorios
from itertools import product # Producto cartesiano
def laberinto(m, n):
def vecinos(i, j): # Conjunto de celdas aledañas a (i, j)
if 0 < i: yield i - 1, j
if i < m - 1: yield i + 1, j
if 0 < j: yield i, j - 1
if j < n - 1: yield i, j + 1
def visitar(i, j): # Alg. de recorrido en profundidad:
X.add((i, j)) # Marcar celda actual como visitada
N = list(vecinos(i, j)); shuffle(N) # Desordenar celdas vecinas
for h, k in N: # Para cada celda vecina
if (h, k) in X: continue # ...que no haya sido visitada:
A[i + h + 1][j + k + 1] = ' ' # Tumbar el muro que las separa
visitar(h, k) # Visitar vecina recursivamente
A = [['█']*(2*n + 1) for i in range(2*m + 1)] # Tablero
for i, j in product(range(1, 2*m + 1, 2), range(1, 2*n + 1, 2)):
A[i][j] = ' ' # Poner celdas blancas
X = set() # Conjunto de celdas visitadas
visitar(randint(0, m - 1), randint(0, n - 1)) # Inicio en celda aleatoria
return('\n'.join(''.join(fila) for fila in A)) # Unir símbolos en un str
print(laberinto(11, 39))
@247369
Copy link

247369 commented Oct 31, 2023

hola.. eh usado el codigo y solo genera laberintos aleatorios, muy bueno!!
yo estoy tratando que lo recorra de manera automatica basandose en el algoritmo primero en profundida y que sea recursivo por si no encuenta el camino en el primer recorrido
gracias!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment