logo

Algoritmo DFS (primera búsqueda en profundidad)

En este artículo, discutiremos el algoritmo DFS en la estructura de datos. Es un algoritmo recursivo para buscar todos los vértices de una estructura de datos de árbol o un gráfico. El algoritmo de búsqueda en profundidad (DFS) comienza con el nodo inicial del gráfico G y profundiza hasta encontrar el nodo objetivo o el nodo sin hijos.

Debido a la naturaleza recursiva, la estructura de datos de la pila se puede utilizar para implementar el algoritmo DFS. El proceso de implementación de DFS es similar al algoritmo BFS.

El proceso paso a paso para implementar el recorrido DFS se detalla a continuación:

  1. Primero, crea una pila con el número total de vértices en el gráfico.
  2. Ahora, elija cualquier vértice como punto inicial del recorrido e introduzca ese vértice en la pila.
  3. Después de eso, empuje un vértice no visitado (adyacente al vértice en la parte superior de la pila) hacia la parte superior de la pila.
  4. Ahora, repita los pasos 3 y 4 hasta que no queden vértices para visitar desde el vértice en la parte superior de la pila.
  5. Si no queda ningún vértice, regrese y saque un vértice de la pila.
  6. Repita los pasos 2, 3 y 4 hasta que la pila esté vacía.

Aplicaciones del algoritmo DFS

Las aplicaciones del uso del algoritmo DFS se detallan a continuación:

  • El algoritmo DFS se puede utilizar para implementar la clasificación topológica.
  • Se puede utilizar para encontrar los caminos entre dos vértices.
  • También se puede utilizar para detectar ciclos en el gráfico.
  • El algoritmo DFS también se utiliza para acertijos de una solución.
  • DFS se utiliza para determinar si un gráfico es bipartito o no.

Algoritmo

Paso 1: SET STATUS = 1 (estado listo) para cada nodo en G

Paso 2: Empuje el nodo inicial A en la pila y establezca su ESTADO = 2 (estado de espera)

Paso 3: Repita los pasos 4 y 5 hasta que la PILA esté vacía

Etapa 4: Pop el nodo superior N. Procéselo y establezca su ESTADO = 3 (estado procesado)

Paso 5: Empuje en la pila a todos los vecinos de N que están en estado listo (cuyo ESTADO = 1) y establezca su ESTADO = 2 (estado de espera)

log4j

[FIN DEL BUCLE]

Paso 6: SALIDA

Pseudocódigo

 DFS(G,v) ( v is the vertex where the search starts ) Stack S := {}; ( start with an empty stack ) for each vertex u, set visited[u] := false; push S, v; while (S is not empty) do u := pop S; if (not visited[u]) then visited[u] := true; for each unvisited neighbour w of uu push S, w; end if end while END DFS() 

Ejemplo de algoritmo DFS

Ahora, comprendamos el funcionamiento del algoritmo DFS usando un ejemplo. En el ejemplo que se muestra a continuación, hay un gráfico dirigido que tiene 7 vértices.

Algoritmo DFS

Ahora, comencemos a examinar el gráfico a partir del nodo H.

Paso 1 - Primero, empuja H hacia la pila.

 STACK: H 

Paso 2 - Saque el elemento superior de la pila, es decir, H, e imprímalo. Ahora, EMPUJE a todos los vecinos de H a la pila que están en estado listo.

 Print: H]STACK: A 

Paso 3 - Saque el elemento superior de la pila, es decir, A, e imprímalo. Ahora, EMPUJE a todos los vecinos de A en la pila que están en estado listo.

 Print: A STACK: B, D 

Etapa 4 - Saque el elemento superior de la pila, es decir, D, e imprímalo. Ahora, EMPUJE a todos los vecinos de D a la pila que están en estado listo.

cuando salio windows 7
 Print: D STACK: B, F 

Paso 5 - Saque el elemento superior de la pila, es decir, F, e imprímalo. Ahora, EMPUJE a todos los vecinos de F a la pila que están en estado listo.

 Print: F STACK: B 

Paso 6 - Saque el elemento superior de la pila, es decir, B, e imprímalo. Ahora, EMPUJE a todos los vecinos de B a la pila que están en estado listo.

 Print: B STACK: C 

Paso 7 - Saque el elemento superior de la pila, es decir, C, e imprímalo. Ahora, EMPUJE todos los vecinos de C a la pila que están en estado listo.

 Print: C STACK: E, G 

Paso 8 - SACA el elemento superior de la pila, es decir, G y EMPUJA todos los vecinos de G a la pila que están en estado listo.

 Print: G STACK: E 

Paso 9 - SACA el elemento superior de la pila, es decir, E y EMPUJA todos los vecinos de E a la pila que están en estado listo.

 Print: E STACK: 

Ahora, se han atravesado todos los nodos del gráfico y la pila está vacía.

Complejidad del algoritmo de búsqueda en profundidad

La complejidad temporal del algoritmo DFS es O(V+E) , donde V es el número de vértices y E es el número de aristas del gráfico.

La complejidad espacial del algoritmo DFS es O (V).

Implementación del algoritmo DFS.

Ahora, veamos la implementación del algoritmo DFS en Java.

En este ejemplo, el gráfico que estamos usando para demostrar el código se muestra a continuación:

Algoritmo DFS
 /*A sample java program to implement the DFS algorithm*/ import java.util.*; class DFSTraversal { private LinkedList adj[]; /*adjacency list representation*/ private boolean visited[]; /* Creation of the graph */ DFSTraversal(int V) /*&apos;V&apos; is the number of vertices in the graph*/ { adj = new LinkedList[V]; visited = new boolean[V]; for (int i = 0; i <v; i++) adj[i]="new" linkedlist(); } * adding an edge to the graph void insertedge(int src, int dest) { adj[src].add(dest); dfs(int vertex) visited[vertex]="true;" *mark current node as visited* system.out.print(vertex + ' '); iterator it="adj[vertex].listIterator();" while (it.hasnext()) n="it.next();" if (!visited[n]) dfs(n); public static main(string args[]) dfstraversal dfstraversal(8); graph.insertedge(0, 1); 2); 3); graph.insertedge(1, graph.insertedge(2, 4); graph.insertedge(3, 5); 6); graph.insertedge(4, 7); graph.insertedge(5, system.out.println('depth first traversal for is:'); graph.dfs(0); < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/28/dfs-algorithm-3.webp" alt="DFS algorithm"> <h3>Conclusion</h3> <p>In this article, we have discussed the depth-first search technique, its example, complexity, and implementation in the java programming language. Along with that, we have also seen the applications of the depth-first search algorithm.</p> <p>So, that&apos;s all about the article. Hope it will be helpful and informative to you.</p> <hr></v;>