Vous êtes sur la page 1sur 18

BSQUEDA DE PROFUNDIDAD (DFS)

Roberto Carlos Martnez Moreno Algoritmos Computacionales Dra. Satu Elisa Schaeffer Verano 2011 http://roberto-mtz.blogspot.com

RECORRIDOS DE GRAFOS
Hay abundantes problemas que se pueden interpretar como un grafo. Un grafo G=(V,E) se basa en un conjunto V de vrtices (o nodos), y un conjunto E de aristas (edges o arcs) Existen diferentes razones para analizar los grafos, entre ellos buscar uno o mas vrtices. Vrtice
p r o f u d i d a d

Arista

DFS; DEPTH-FIST SEARCH


1
La bsqueda en profundidad o DFS Visita todos los vrtices de una ramicacin de un grafo, antes de continuar con el siguiente. Recorre cualquier vrtice muy profundo o lejano del origen antes que otros cercanos. Se puede implementar recursivamente.

2 3 5 6 7 8 4

11 12 10

13 14

15 16 9

DFS; DEPTH-FIST SEARCH


1

Para no inspeccionar a un vrtice que ya visitamos varias veces, debemos de sealar los vrtices que ya visitamos para que as solo visitamos a un vrtice que no ha sido marcado como visitado.

2 3 5 6 7 8 4

11 12 10

13 14

15 16 9

DFS; DEPTH-FIST SEARCH


Cuando ya no hay nodos que visitar en el camino que hemos recorrido, entonces regresa (Backtracking), volviendo atrs, volviendo al vertice mas proximo que no ha terminado de explorar. Si se hace una visita antes de la recursin, es preorden, despus es postorden.
1 2 3 5 6 7 8 9 4 10 11 12 15 16 13 14

ALGORITMO
1. funcin DFS(vrtice X). 2. sealamos X como visitado. 3. para cada vrtice V prximo a X, si no se ha visitado; marcamos como visitado. 4. llamamos DFS(vrtice V). DFS(vrtice X){ visitado[X] = Verdad; para cada V prximo{ si visitado[V] = Falso { DFS(V); } } }

NOTA

Es importante decir que este algoritmo se puede escribir de las dos maneras, recursivo e iterativo, de ambas versiones es lo mismo, solo que en iterativo se hace explcito una pila, esto se remplaza en el modo recursivo con las llamadas.

EJEMPLO
1 2 3 6 7 8 9 4 10 11 12 15 13 14 5 16

EJEMPLO
C G I

EJEMPLO
C

Si llamamos inicial mente a C, lo marcamos como visitado, sus prximos son G, I, O

EJEMPLO
Despues de la llamada recursiva, ira a su prximo segun su adyecente, ahora se va a G, se marca como visitado, por lo tanto el inicial es G y sus prximos son C, M, O.
C G I

EJEMPLO
C

Ahora marcamos como visitado a M, que es el siguiente, su prximo es G.

EJEMPLO
Como el vrtice G ya esta visitado, termina la recursin en esa rama, el siguiente prximo de G es O, que no ha sido visitado, lo marcamos; ahora sus prximos son GyC
C G I

EJEMPLO
Sus prximos ya han sido visitados, por lo tanto terminamos la recursin, ahora el actual es C, teniendo como prximos a G, O, I. Como G y O ya fueron M visitados, nos vamos a I y lo marcamos como visitado
C G I

EJEMPLO
Entonces termina la recursin y termina el recorrido por DFS
C G I

ANLISIS ASINTTICO
Suponiendo que el grafo est conectado. La bsqueda en profundidad visita cada vrtice una ves ya que los visitados no volvern a ser revisados y checa cada arista cada que se desplaza. Es por eso que, la complejidad del DFS es O(V+E)

APLICACIONES
Soluciones en la inteligencia articial. Encontrar un componente conectado (teora de los grafos) Detectar ciclos Clasicacin topogrca. La resolucin de laberintos u otros puzzles. Generar laberintos Construccin de caminos

REFERENCIAS
http://elisa.dyndns-web.com/~elisa/teaching/aa/pdf/aa.pdf http://www.inf.ed.ac.uk/teaching/courses/cs2/LectureNotes/CS2Bh/ADS/ ads10.pdf http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/ GraphAlgor/depthSearch.htm http://www.cs.us.es/cursos/cc-2009/material/dfs.pdf http://www.youtube.com/watch?v=or9xlA3YYzo&feature=share http://www.algolist.net/Algorithms/Graph/Undirected/Depth-rst_search

Vous aimerez peut-être aussi