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 -
- Primeiro, crie uma pilha com o número total de vértices do gráfico.
- Agora, escolha qualquer vértice como ponto inicial da travessia e coloque esse vértice na pilha.
- Depois disso, empurre um vértice não visitado (adjacente ao vértice no topo da pilha) para o topo da pilha.
- 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.
- Se não sobrar nenhum vértice, volte e retire um vértice da pilha.
- 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.
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 -
/*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) /*'V' 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's all about the article. Hope it will be helpful and informative to you.</p> <hr></v;>