2. 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.
3. 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:
4. 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:
5. 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.
6. 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.
7. Pseudocódigo DFS-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 problema Supongamos que tenemos un árbol (dibujo) ¿Cómo recorremos sus nodos en profundidad? Siendo el 1 el nodo inicial y 7 el nodo objetivo:
9. 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