-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreto9.py
58 lines (45 loc) · 1.82 KB
/
reto9.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Integrantes -> Sebastián Suárez, Steven Erazo
from collections import deque
def find_shortest_path(maze, start, goal):
# Obtener las dimensiones del laberinto
rows = len(maze)
cols = len(maze[0])
# Verificar si una posición está dentro del laberinto
def is_valid_position(row, col):
return 0 <= row < rows and 0 <= col < cols and maze[row][col] == 0
# Definir las direcciones arriba, abajo, izquierda y derecha
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
# Cola para almacenar las posiciones a explorar
queue = deque([(start, 0)]) # La tupla (posición, distancia)
# Conjunto para almacenar las posiciones visitadas
visited = set([start])
# Bucle principal de búsqueda en anchura
while queue:
position, distance = queue.popleft()
row, col = position
# Verificar si se alcanzó la posición objetivo
if position == goal:
return distance
# Explorar las posiciones adyacentes
for direction in directions:
new_row = row + direction[0]
new_col = col + direction[1]
if is_valid_position(new_row, new_col) and (new_row, new_col) not in visited:
queue.append(((new_row, new_col), distance + 1))
visited.add((new_row, new_col))
# No se encontró una ruta válida hasta la posición objetivo
return -1
maze = [
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 0],
[1, 1, 0, 0, 0],
[0, 0, 0, 1, 0]
]
start = (0, 0) # Posición inicial
goal = (3, 3) # Posición objetivo
distance = find_shortest_path(maze, start, goal)
if distance != -1:
print("La ruta más corta tiene una distancia de:", distance)
else:
print("No se encontró una ruta válida hasta la posición objetivo.")