Está en la página 1de 1

Parte 1: L�nea de c�digo para convertir BFS a DFS

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

También podría gustarte