-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaestrella.py
31 lines (25 loc) · 1.15 KB
/
aestrella.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
from solucionador import Solucionador
import heapq
class AEstrella(Solucionador):
def resolver(self):
self.frontera = []
heapq.heappush(self.frontera, self.estado_inicial)
self.nodos_explorados = set()
self.max_profundidad = 0
self.arbol = [] # Lista para almacenar las relaciones del árbol
while self.frontera:
estado_actual = heapq.heappop(self.frontera)
if estado_actual.prueba_objetivo():
self.establecer_solucion(estado_actual)
return
self.nodos_explorados.add(estado_actual)
hijos = estado_actual.generar_hijos()
for hijo in hijos:
if hijo not in self.nodos_explorados:
heapq.heappush(self.frontera, hijo)
if hijo.profundidad > self.max_profundidad:
self.max_profundidad = hijo.profundidad
# Agregar relacion padre-hijo al arbol
self.arbol.append((estado_actual, hijo))
# Si no se encuentra solucion
messagebox.showerror("Sin solución", "No se encontró una solución al puzzle.")