Este artigo demonstra o procedimento para implementar o DFS para uma árvore ou gráfico fornecido.
Como implementar a pesquisa de profundidade primeiro ou DFS para um gráfico em Java?
O DFS é usado principalmente para pesquisar um grafo visitando cada ramificação/vértice exatamente uma vez. Ele pode detectar ou identificar ciclos em um gráfico que ajuda na prevenção de deadlocks. Pode ser usado para resolver quebra-cabeças ou problemas de labirinto. O DFS pode ser implementado/utilizado em algoritmos de gráficos, rastreamento da Web e design de compiladores.
Para obter uma explicação, visite o código abaixo do Depth First Search ou DFS:
aula Gráfico {
privado LinkedList addNode [ ] ;
privado boleano Atravessado [ ] ;
Gráfico ( int vértices ) {
addNode = novo LinkedList [ vértices ] ;
Atravessado = novo boleano [ vértices ] ;
para ( int eu = 0 ; eu < vértices ; eu ++ )
addNode [ eu ] = novo LinkedList ( ) ;
}
vazio addEdge ( int src, int começar ) {
addNode [ origem ] . adicionar ( começar ) ;
}
Descrição do código acima:
- Primeiro, a classe chamada “ Gráfico ' é criado. Dentro dele, declara um “ LinkedList 'chamado' addNode[] ” e uma matriz de tipo booleano chamada “ Atravessado[] ”.
- Em seguida, passe os vértices para o construtor do “ Gráfico ” como um parâmetro.
- Depois disso, o “ para ” loop é criado para mover através de cada nó da ramificação selecionada.
- No final, o void tipo “ addEdge() ” é usado para adicionar arestas entre os vértices. Esta função recebe dois parâmetros: a origem do vértice “ origem ” e o vértice de destino “ começar ”.
Após a criação de um gráfico, agora vamos adicionar o código de pesquisa em profundidade ou DFS para o gráfico criado acima:
vazio DFS ( int vértice ) {
Atravessado [ vértice ] = verdadeiro ;
Sistema . fora . imprimir ( vértice + ' ' ) ;
Iterador esse = addNode [ vértice ] . listIterator ( ) ;
enquanto ( esse. temPróximo ( ) ) {
int adj = esse. próximo ( ) ;
se ( ! Atravessado [ adj ] )
DFS ( adj ) ;
}
}
No bloco de código acima:
- Primeiro, o “ DFS() ” função é criada que está recebendo “ vértice ” como parâmetro. Esse vértice é marcado como visitado.
- Em seguida, imprima o vértice visitado usando o “ out.print() ” método.
- Em seguida, crie uma instância do “ Iterador ” que itera sobre os vértices adjacentes do vértice atual.
- Se o vértice não for visitado, ele passa esse vértice para o “ DFS() ”função.
Agora, vamos criar um “ principal() ” parte da função para criar o gráfico e, em seguida, aplicar o DFS a ele:
público estático vazio principal ( Corda argumentos [ ] ) {
Gráfico k = novo Gráfico ( 4 ) ;
k. addEdge ( 0 , 1 ) ;
k. addEdge ( 1 , 2 ) ;
k. addEdge ( 2 , 3 ) ;
k. addEdge ( 3 , 3 ) ;
Sistema . fora . println ( 'Seguindo é a primeira travessia de profundidade' ) ;
k. DFS ( 1 ) ;
}
}
Explicação do código acima:
- Primeiro, crie um objeto “ k ' para o ' Gráfico() ” método.
- A seguir, o “ addEdge() ” é utilizado para adicionar arestas entre vários vértices. Isso cria a estrutura do nosso gráfico.
- No final, passe qualquer valor de vértice como argumento para o já criado “ DFS() ”função. Para encontrar esse caminho de vértice a partir da raiz, utilize um algoritmo de busca em profundidade. Por exemplo, um valor de “ 1 ” é passado para o “ DFS() ”função.
Após o final da fase de compilação:
A saída mostra que a pesquisa em profundidade foi implementada com sucesso.
Conclusão
Depth First Search é um algoritmo de travessia de gráfico que forma a base para muitos algoritmos de gráfico, como encontrar o caminho mais curto, abranger árvores e análise de conectividade. Ele começa a partir do nó raiz e, em seguida, move-se o mais fundo possível até o nó de saída ou o último nó dessa ramificação antes de retroceder. Este artigo demonstrou o procedimento para implementar a pesquisa em profundidade ou DFS para um grafo em Java.