Depth First Search
¿Qué es Depth First Search (DFS)?
Depth First Search (DFS) es un algoritmo para recorrer o buscar elementos en un grafo o árbol. Explora cada rama del grafo lo más profundo posible antes de retroceder y explorar otra rama.
El Código
class Graph {
constructor() {
this.adjacencyList = {};
}
addVertex(vertex) {
if (!this.adjacencyList[vertex]) {
this.adjacencyList[vertex] = [];
}
}
addEdge(v1, v2) {
this.adjacencyList[v1].push(v2);
this.adjacencyList[v2].push(v1);
}
depthFirstSearch(start) {
const result = [];
const visited = {};
const adjacencyList = this.adjacencyList;
(function dfs(vertex) {
if (!vertex) return null;
visited[vertex] = true;
result.push(vertex);
adjacencyList[vertex].forEach((neighbor) => {
if (!visited[neighbor]) {
return dfs(neighbor);
}
});
})(start);
return result;
}
}
// Ejemplo de uso
const graph = new Graph();
graph.addVertex("A");
graph.addVertex("B");
graph.addVertex("C");
graph.addVertex("D");
graph.addVertex("E");
graph.addVertex("F");
graph.addEdge("A", "B");
graph.addEdge("A", "C");
graph.addEdge("B", "D");
graph.addEdge("C", "E");
graph.addEdge("D", "E");
graph.addEdge("D", "F");
graph.addEdge("E", "F");
console.log("Recorrido DFS:", graph.depthFirstSearch("A"));
Ver en repositorio: GitHub
Puntos Clave del Algoritmo
- Entrada: Un grafo representado como una lista de adyacencia y un nodo inicial.
- Salida: Un arreglo con los nodos en el orden en que fueron visitados.
-
Método:
- Marca el nodo inicial como visitado.
- Explora recursivamente cada vecino no visitado del nodo actual.
- Complejidad:
- Tiempo: O(V + E), donde V es el número de vértices y E el número de aristas.
- Espacio: O(V) debido a la pila de recursión.
- Aplicaciones:
- Detectar ciclos en un grafo.
- Encontrar componentes conectados.
- Resolver problemas como el laberinto o el análisis de dependencias.
Ejemplo de Ejecución
Grafo inicial:
- Nodos:
A, B, C, D, E, F
- Aristas:
A-B, A-C, B-D, C-E, D-E, D-F, E-F
Recorrido DFS comenzando en A
:
- Visitar
A
. - Visitar
B
. - Visitar
D
. - Visitar
E
. - Visitar
F
. - Visitar
C
.
Resultado: [A, B, D, E, F, C]
Información Adicional
DFS es un algoritmo versátil utilizado en muchos problemas relacionados con grafos y árboles. Aunque puede realizarse de forma recursiva o iterativa, la implementación recursiva es más común debido a su simplicidad.