logo

Algoritmo DFS (primeira pesquisa em profundidade)

Neste artigo, discutiremos o algoritmo DFS na estrutura de dados. É um algoritmo recursivo para pesquisar todos os vértices de uma estrutura de dados em árvore ou de um gráfico. O algoritmo de busca em profundidade (DFS) começa com o nó inicial do grafo G e se aprofunda até encontrar o nó objetivo ou o nó sem filhos.

Devido à natureza recursiva, a estrutura de dados da pilha pode ser usada para implementar o algoritmo DFS. O processo de implementação do DFS é semelhante ao algoritmo BFS.

O processo passo a passo para implementar a travessia DFS é fornecido a seguir -

  1. Primeiro, crie uma pilha com o número total de vértices do gráfico.
  2. Agora, escolha qualquer vértice como ponto inicial da travessia e coloque esse vértice na pilha.
  3. Depois disso, empurre um vértice não visitado (adjacente ao vértice no topo da pilha) para o topo da pilha.
  4. Agora, repita as etapas 3 e 4 até que não haja mais vértices para visitar a partir do vértice no topo da pilha.
  5. Se não sobrar nenhum vértice, volte e retire um vértice da pilha.
  6. Repita as etapas 2, 3 e 4 até que a pilha esteja vazia.

Aplicações do algoritmo DFS

As aplicações do uso do algoritmo DFS são fornecidas a seguir -

  • O algoritmo DFS pode ser usado para implementar a classificação topológica.
  • Pode ser usado para encontrar os caminhos entre dois vértices.
  • Também pode ser usado para detectar ciclos no gráfico.
  • O algoritmo DFS também é usado para quebra-cabeças de uma solução.
  • DFS é usado para determinar se um gráfico é bipartido ou não.

Algoritmo

Passo 1: SET STATUS = 1 (estado pronto) para cada nó em G

variáveis ​​globais javascript

Passo 2: Empurre o nó inicial A na pilha e defina seu STATUS = 2 (estado de espera)

Etapa 3: Repita as etapas 4 e 5 até que STACK esteja vazio

Passo 4: Abra o nó superior N. Processe-o e defina seu STATUS = 3 (estado processado)

Etapa 5: Coloque na pilha todos os vizinhos de N que estão no estado pronto (cujo STATUS = 1) e defina seu STATUS = 2 (estado de espera)

[FIM DO LOOP]

Etapa 6: SAÍDA

Pseudo-có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() 

Exemplo de algoritmo DFS

Agora, vamos entender o funcionamento do algoritmo DFS usando um exemplo. No exemplo abaixo, há um gráfico direcionado com 7 vértices.

Algoritmo DFS

Agora, vamos começar a examinar o gráfico começando no nó H.

Passo 1 - Primeiro, coloque H na pilha.

 STACK: H 

Passo 2 - POP o elemento superior da pilha, ou seja, H, e imprima-o. Agora, PUSH todos os vizinhos de H na pilha que estão no estado pronto.

 Print: H]STACK: A 

etapa 3 - POP o elemento superior da pilha, ou seja, A, e imprima-o. Agora, PUSH todos os vizinhos de A na pilha que estão no estado pronto.

 Print: A STACK: B, D 

Passo 4 - POP o elemento superior da pilha, ou seja, D, e imprima-o. Agora, PUSH todos os vizinhos de D na pilha que estão no estado pronto.

quantas onças equivalem a 10 mililitros
 Print: D STACK: B, F 

Etapa 5 - POP o elemento superior da pilha, ou seja, F, e imprima-o. Agora, PUSH todos os vizinhos de F na pilha que estão no estado pronto.

 Print: F STACK: B 

Etapa 6 - POP o elemento superior da pilha, ou seja, B, e imprima-o. Agora, EMPURRE todos os vizinhos de B na pilha que estão no estado pronto.

 Print: B STACK: C 

Etapa 7 - POP o elemento superior da pilha, ou seja, C, e imprima-o. Agora, PUSH todos os vizinhos de C na pilha que estão no estado pronto.

 Print: C STACK: E, G 

Etapa 8 - POP o elemento superior da pilha, ou seja, G e PUSH todos os vizinhos de G na pilha que estão no estado pronto.

 Print: G STACK: E 

Etapa 9 - POP o elemento superior da pilha, ou seja, E e PUSH todos os vizinhos de E na pilha que estão no estado pronto.

 Print: E STACK: 

Agora, todos os nós do gráfico foram percorridos e a pilha está vazia.

Complexidade do algoritmo de pesquisa em profundidade

A complexidade de tempo do algoritmo DFS é O(V+E) , onde V é o número de vértices e E é o número de arestas no gráfico.

A complexidade espacial do algoritmo DFS é O(V).

Implementação do algoritmo DFS

Agora, vamos ver a implementação do algoritmo DFS em Java.

Neste exemplo, o gráfico que estamos usando para demonstrar o código é fornecido da seguinte forma -

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;>