DFS(Depth-first Search) o Búsqueda en profundidad
Una Búsqueda en profundidad es un algoritmo que permite recorrer todos los vértices de un grafo o árbol de manera ordenada, mas no uniforme.Un grafo G es un par (V, A) donde V es un conjunto finito y no vacío, cuyos elementos reciben el nombre de vértices, y A es un conjunto de arcos representados por pares no ordenados de elementos de V.
Un ejemplo de grafo sería G = ( V, A ) dado por los conjuntos:  V = {1, 2, 3, 4, 5, 6}  y   A = { {1,4}, {1,5}, {1,6}, {2,4}, {2,6}, {3,5}, {4,5} }, y cuya representación gráfica se refleja en la siguiente figura:
Un ejemplo de grafo sería G = ( V, A ) dado por los conjuntos:  V = {1, 2, 3, 4, 5, 6}  y   A = { {1,4}, {1,5}, {1,6}, {2,4}, {2,6}, {3,5}, {4,5} }, y cuya representación gráfica se refleja en la siguiente figura:
Consiste en ir expandiendo todos y cada uno de los vértices que va localizando, de forma ordenada en un camino concreto. Cuando ya no quedan más vértices que visitar en dicho camino, regresar,de modo que repite el mismo proceso con cada uno de las partes del vértice ya procesado.
ALGORITMO DFS: Sea G = (V, A) un grafo conexo, V’ = V  un conjunto de vértice, A’ un vector de arcos inicialmente vacío y P un vector auxiliar inicialmente vacío: Se introduce el vértice inicial en P y se elimina del conjunto V’.Mientras V’ no sea vacío repetir los puntos 3 y 4. En otro caso parar.Se toma el último elemento de P como vértice activo.Si el vértice activo tiene algún vértice adyacente que se encuentre en V’:Se toma el de menor índice. Se inserta en P como último elemento. Se elimina de V’. Se inserta en A’ el arco que le une con el vértice activo. Si el vértice activo no tiene adyacentes se elimina de P.
PseudocódigoDFS-Visitar(nodo u)        estado[u] ← VISITADO        tiempo ← tiempo + 1        d[u] ← tiempo      PARA CADAv ∈ Vecinos[u] HACER              SI estado[v] = NO_VISITADO ENTONCES                              padre[v] ← u DFS_Visitar(v)              estado[u] ← TERMINADO              tiempo ← tiempo + 1          f[u] ← tiempo
Planteamiento del problemaSupongamos que tenemos un árbol (dibujo) ¿Cómo recorremos sus nodos en profundidad? Siendo el 1 el nodo inicial y 7 el nodo objetivo:
  Buscaremos en todas las ramas que cuelgan, de izquierda a derecha, y exploramos cada rama hasta llegar a una hoja.    Para cada hijo buscamos a su vez en profundidad, parando cuando se encuentre el objetivo.    En este ejemplo, la secuencia a seguir está indicada por el número de los nodos: 1-> 2-> 3-> 4-> 5-> 6-> 7
Referenciashttp://www.dma.fi.upm.es/java/matematicadiscreta/busqueda/http://es.wikipedia.org/wiki/B%C3%BAsqueda_en_profundidad

Depth-first Search

  • 1.
    DFS(Depth-first Search)o Búsqueda en profundidad
  • 2.
    Una Búsqueda enprofundidad es un algoritmo que permite recorrer todos los vértices de un grafo o árbol de manera ordenada, mas no uniforme.Un grafo G es un par (V, A) donde V es un conjunto finito y no vacío, cuyos elementos reciben el nombre de vértices, y A es un conjunto de arcos representados por pares no ordenados de elementos de V.
  • 3.
    Un ejemplo degrafo sería G = ( V, A ) dado por los conjuntos:  V = {1, 2, 3, 4, 5, 6}  y   A = { {1,4}, {1,5}, {1,6}, {2,4}, {2,6}, {3,5}, {4,5} }, y cuya representación gráfica se refleja en la siguiente figura:
  • 4.
    Un ejemplo degrafo sería G = ( V, A ) dado por los conjuntos:  V = {1, 2, 3, 4, 5, 6}  y   A = { {1,4}, {1,5}, {1,6}, {2,4}, {2,6}, {3,5}, {4,5} }, y cuya representación gráfica se refleja en la siguiente figura:
  • 5.
    Consiste en irexpandiendo todos y cada uno de los vértices que va localizando, de forma ordenada en un camino concreto. Cuando ya no quedan más vértices que visitar en dicho camino, regresar,de modo que repite el mismo proceso con cada uno de las partes del vértice ya procesado.
  • 6.
    ALGORITMO DFS: SeaG = (V, A) un grafo conexo, V’ = V  un conjunto de vértice, A’ un vector de arcos inicialmente vacío y P un vector auxiliar inicialmente vacío: Se introduce el vértice inicial en P y se elimina del conjunto V’.Mientras V’ no sea vacío repetir los puntos 3 y 4. En otro caso parar.Se toma el último elemento de P como vértice activo.Si el vértice activo tiene algún vértice adyacente que se encuentre en V’:Se toma el de menor índice. Se inserta en P como último elemento. Se elimina de V’. Se inserta en A’ el arco que le une con el vértice activo. Si el vértice activo no tiene adyacentes se elimina de P.
  • 7.
    PseudocódigoDFS-Visitar(nodo u) estado[u] ← VISITADO tiempo ← tiempo + 1 d[u] ← tiempo PARA CADAv ∈ Vecinos[u] HACER SI estado[v] = NO_VISITADO ENTONCES padre[v] ← u DFS_Visitar(v) estado[u] ← TERMINADO tiempo ← tiempo + 1 f[u] ← tiempo
  • 8.
    Planteamiento del problemaSupongamosque tenemos un árbol (dibujo) ¿Cómo recorremos sus nodos en profundidad? Siendo el 1 el nodo inicial y 7 el nodo objetivo:
  • 9.
    Buscaremosen todas las ramas que cuelgan, de izquierda a derecha, y exploramos cada rama hasta llegar a una hoja. Para cada hijo buscamos a su vez en profundidad, parando cuando se encuentre el objetivo. En este ejemplo, la secuencia a seguir está indicada por el número de los nodos: 1-> 2-> 3-> 4-> 5-> 6-> 7
  • 11.