Puede hacerlo con una sobrecarga de espacio constante.
BFS tiene la propiedad de que los nodos no visitados en la cola tienen profundidades que nunca disminuyen y aumentan a lo sumo 1. Para leer nodos de la cola BFS, puede realizar un seguimiento de la profundidad actual en un solo depth
variable, que es inicialmente 0.
Todo lo que necesita hacer es registrar qué nodo en la cola corresponde al siguiente aumento de profundidad. Puede hacer esto simplemente usando una variable timeToDepthIncrease
para registrar la cantidad de elementos que ya están en la cola cuando inserta este nodo, y disminuyendo este contador cada vez que saca un nodo de la cola.
Cuando llega a cero, el siguiente nodo que el pop de la cola estará en un nuevo, mayor (por 1) de profundidad, por lo que:
- Incremento
depth
- Establecer
pendingDepthIncrease
a cierto
Cada vez que inserta un nodo secundario en la cola, primero verifique si pendingDepthIncrease
es verdadero. Si es así, este nodo tendrá una mayor profundidad, por lo tanto, establezca timeToDepthIncrease
en la cantidad de nodos en la cola antes de presionarlo, y restablezca pendingDepthIncrease
en falso.
¡Finalmente, pare cuando depth
exceda la profundidad deseada! Cada nodo no visitado que podría aparecer más tarde debe estar a esta profundidad o más.
[EDIT:. Gracias comentarista Keyser]
¿Simplemente detienes la búsqueda cuando alcanzas la profundidad máxima? – Mat
simplemente mantenga un parámetro de profundidad es la rutina de su bfs para que cuando llegue al máximo no siga buscando más profundamente – ControlAltDel
¿Puede explicar con un ejemplo? – user1220022