Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algortmos
Algortmos
En BFS, la estructura de datos para la agenda es una cola (deque). Para convertirlo
en DFS, se debe usar una pila (deque):
python
Copy code
from collections import deque # Cambiar esta l�nea para DFS agenda = deque()
Parte 2: Nueva l�nea para convertir BFS a DFS
Para convertir BFS a DFS, el cambio es reemplazar la operaci�n popleft() por pop().
Esto hace que la agenda se comporte como una pila:
python
Copy code
# Cambiar esta l�nea para DFS nodo = agenda.pop() # Para DFS
Parte 3: Algoritmo DFBB
El algoritmo DFBB es una versi�n del DFS que poda el �rbol de b�squeda al encontrar
una soluci�n. Aqu� se busca la soluci�n en la profundidad l�mite:
python
Copy code
class DFBB: @staticmethod def search(start, stop, prof_max): solucion = None agenda
= deque() explored = set() if stop(start): return trajectory(start)
agenda.append(start) while agenda: nodo = agenda.pop() # Operaci�n de pila if
nodo.get_depth() < prof_max: for child in nodo.expand(): if stop(child): solucion =
trajectory(child) # A�adimos el c�digo para establecer la soluci�n print("ruta de
%d pasos" % (len(solucion) - 1)) return solucion elif not child in explored:
agenda.append(child)
Parte 4: Algoritmo Bidireccional
En este algoritmo, necesitamos encontrar una soluci�n que busca desde dos
direcciones: inicio y fin. Aqu� est� el c�digo para implementar la b�squeda
bidireccional con la parte que debes completar para conectar los dos caminos:
python
Copy code
class Bidireccional: @staticmethod def search(start, end): if start == end: return
trajectory(start) Df = {start: start} # Frontera hacia adelante Db = {end: end} #
Frontera hacia atr�s E = {} # Conjunto de expandidos s = "" while Df and Db: Dfp =
{} # Frontera temporal para adelante Dbp = {} # Frontera temporal para atr�s for n
in Df: E[n] = n for h in n.expand(): if h in Db: print(s) r = trajectory(Db[h])
r.reverse() return trajectory(h) + r[1:] # Para unir las trayectorias if h not in
E: s += "." Dfp[h] = h Df = Dfp # Actualizar frontera hacia adelante for n in Db:
E[n] = n for h in n.expand(): if h in Df: print(s) # Completa el c�digo para unir
las trayectorias r = trajectory(Df[h]) return trajectory(h) + r[1:] # Uni�n de las
trayectorias if h not in E: s += "-" Dbp[h] = h Db = Dbp # Actualizar frontera
hacia atr�s