Como implementar a pesquisa de profundidade primeiro ou DFS para um gráfico em Java?

Como Implementar A Pesquisa De Profundidade Primeiro Ou Dfs Para Um Grafico Em Java



Depth First Search (DFS) é um algoritmo de busca de travessia de gráfico que começa a explorar cada ramificação do nó raiz e, em seguida, se move o mais fundo possível para percorrer cada ramificação do grafo antes de retroceder. Essa pesquisa é fácil de implementar e consome menos memória em comparação com outros algoritmos de travessia. Ele visita todos os nós em um componente conectado e ajuda a verificar o caminho entre dois nós. O DFS também pode realizar classificação topológica para gráficos como Directed Acyclic Graph (DAG).

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.