def esValido(n, m, i, j, lab):
return 0 <= i < m and 0 <= j < n and lab[i][j] == 0
def recorroLab(lab):
m, n = len(lab), len(lab[0])
min_path = [float('inf')] # Almacenará la longitud mínima del camino
best_path = [None] # Almacenará el mejor camino encontrado
def recorrido(i, j, path):
if not esValido(n, m, i, j, lab):
return
if (i, j) == (m - 1, n - 1): # Si hemos llegado al final
if len(path) < min_path[0]: # Si el nuevo camino es más corto
min_path[0] = len(path) # Actualizamos la longitud mínima
best_path[0] = path # Actualizamos el mejor camino
return
lab[i][j] = 1 # Marcamos la celda como visitada
# Exploramos los cuatro posibles movimientos: arriba, abajo, izquierda, derecha
recorrido(i + 1, j, path + "D")
recorrido(i - 1, j, path + "U")
recorrido(i, j + 1, path + "R")
recorrido(i, j - 1, path + "L")
lab[i][j] = 0 # Desmarcamos la celda para futuras exploraciones
# Comenzamos la exploración desde la posición inicial (0, 0) con un camino vacío
recorrido(0, 0, "")
return best_path[0] # Devolvemos el mejor camino encontrado
laberinto = [
[0, 0, 1, 0, 0],
[1, 0, 1, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 0],
[0, 1, 0, 1, 0]
]
print(recorroLab(laberinto))
ZGVmIGVzVmFsaWRvKG4sIG0sIGksIGosIGxhYik6CiAgICByZXR1cm4gMCA8PSBpIDwgbSBhbmQgMCA8PSBqIDwgbiBhbmQgbGFiW2ldW2pdID09IDAKCmRlZiByZWNvcnJvTGFiKGxhYik6CiAgICBtLCBuID0gbGVuKGxhYiksIGxlbihsYWJbMF0pCiAgICBtaW5fcGF0aCA9IFtmbG9hdCgnaW5mJyldICAjIEFsbWFjZW5hcsOhIGxhIGxvbmdpdHVkIG3DrW5pbWEgZGVsIGNhbWlubwogICAgYmVzdF9wYXRoID0gW05vbmVdICAjIEFsbWFjZW5hcsOhIGVsIG1lam9yIGNhbWlubyBlbmNvbnRyYWRvCiAgICAKICAgIGRlZiByZWNvcnJpZG8oaSwgaiwgcGF0aCk6CiAgICAgICAgaWYgbm90IGVzVmFsaWRvKG4sIG0sIGksIGosIGxhYik6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIAogICAgICAgIGlmIChpLCBqKSA9PSAobSAtIDEsIG4gLSAxKTogICMgU2kgaGVtb3MgbGxlZ2FkbyBhbCBmaW5hbAogICAgICAgICAgICBpZiBsZW4ocGF0aCkgPCBtaW5fcGF0aFswXTogICMgU2kgZWwgbnVldm8gY2FtaW5vIGVzIG3DoXMgY29ydG8KICAgICAgICAgICAgICAgIG1pbl9wYXRoWzBdID0gbGVuKHBhdGgpICAjIEFjdHVhbGl6YW1vcyBsYSBsb25naXR1ZCBtw61uaW1hCiAgICAgICAgICAgICAgICBiZXN0X3BhdGhbMF0gPSBwYXRoICAjIEFjdHVhbGl6YW1vcyBlbCBtZWpvciBjYW1pbm8KICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgCiAgICAgICAgbGFiW2ldW2pdID0gMSAgIyBNYXJjYW1vcyBsYSBjZWxkYSBjb21vIHZpc2l0YWRhCiAgICAgICAgCiAgICAgICAgIyBFeHBsb3JhbW9zIGxvcyBjdWF0cm8gcG9zaWJsZXMgbW92aW1pZW50b3M6IGFycmliYSwgYWJham8sIGl6cXVpZXJkYSwgZGVyZWNoYQogICAgICAgIHJlY29ycmlkbyhpICsgMSwgaiwgcGF0aCArICJEIikKICAgICAgICByZWNvcnJpZG8oaSAtIDEsIGosIHBhdGggKyAiVSIpCiAgICAgICAgcmVjb3JyaWRvKGksIGogKyAxLCBwYXRoICsgIlIiKQogICAgICAgIHJlY29ycmlkbyhpLCBqIC0gMSwgcGF0aCArICJMIikKICAgICAgICAKICAgICAgICBsYWJbaV1bal0gPSAwICAjIERlc21hcmNhbW9zIGxhIGNlbGRhIHBhcmEgZnV0dXJhcyBleHBsb3JhY2lvbmVzCiAgICAKICAgICMgQ29tZW56YW1vcyBsYSBleHBsb3JhY2nDs24gZGVzZGUgbGEgcG9zaWNpw7NuIGluaWNpYWwgKDAsIDApIGNvbiB1biBjYW1pbm8gdmFjw61vCiAgICByZWNvcnJpZG8oMCwgMCwgIiIpCiAgICAKICAgIHJldHVybiBiZXN0X3BhdGhbMF0gICMgRGV2b2x2ZW1vcyBlbCBtZWpvciBjYW1pbm8gZW5jb250cmFkbwoKbGFiZXJpbnRvID0gWwogICAgWzAsIDAsIDEsIDAsIDBdLAogICAgWzEsIDAsIDEsIDAsIDFdLAogICAgWzEsIDAsIDAsIDAsIDFdLAogICAgWzEsIDAsIDAsIDAsIDBdLAogICAgWzAsIDEsIDAsIDEsIDBdCl0KCnByaW50KHJlY29ycm9MYWIobGFiZXJpbnRvKSkK