Como implementar a profundidade Primeira pesquisa em C ++

Como implementar a profundidade Primeira pesquisa em C ++
Primeira pesquisa de profundidade (DFS) é um algoritmo recursivo poderoso usado para pesquisar todos os nós de um gráfico ou árvore na estrutura de dados. Ele inicia sua pesquisa selecionando um vértice específico e depois começa a explorar o gráfico o mais longe possível ao longo de cada ramificação antes de voltar atrás. O retorno ocorre sempre que o Dfs O algoritmo se aproxima de um nó que não tem vizinhos para visitar. Quando se aproxima de um nó sem vizinhos, ele refaz seus passos para o nó anterior.

Em Dfs, Os nós que estão sendo explorados são armazenados em uma estrutura de dados de pilha. As bordas que nos levam a nós inexploradas são chamadas 'Bordas de descoberta'Enquanto as bordas vão liderar os nós já visitados são chamados'Bordas de bloco'. Dfs é útil em cenários quando um programador deseja encontrar componentes ou ciclos conectados em um gráfico.

Siga as diretrizes deste artigo para implementar Dfs em c++.

Implementação de DFs em C++

Na seção a seguir, vamos repassar como Dfs é implementado em C++. Pode -se seguir as etapas fornecidas para implementar Dfs.

  1. Insira o nó raiz de uma árvore ou gráfico na pilha.
  2. Adicione o item principal da pilha à sua lista visitada.
  3. Descubra todos os nós adjacentes ao nó visitado e adicione os nós que ainda não visitaram a pilha.
  4. Repita as etapas 2 e 3 até que a pilha esteja vazia.

DFS pseudocode

O Dfs pseudocode é mostrado abaixo. No iniciar() função, nós executamos nosso Dfs função em cada nó. Como o gráfico pode ter duas peças desconectadas, podemos executar o Dfs Algoritmo em cada nó para garantir que cobrimos todos os vértices.

DFS (G A)
a.visitado = true
Para cada b ∈ G.Adj [a]
se b.visitado == false
DFS (G, B)
iniciar()

Para cada A ∈ G
a.visitado = false
Para cada A ∈ G
DFS (G, A)

Aqui G, A e B representam o gráfico, primeiro visitaram o nó e o nó na pilha, respectivamente.

Implementando DFS em C++

Um programa C ++ para Dfs A implementação é dada abaixo:

#incluir
#incluir
#incluir
usando namespace std;
modelo
Classe DepthfirstSearch

privado:
mapa > adjList;
público:
DepthfirstSearch ()
void add_edge (t a, t b, bool dir = true)

adjlist [a].push_back (b);
se (dir)

adjlist [b].push_back (a);


Void Prnt ()

para (Auto I: adjlist)
cout<";
para (t entrada: eu.segundo)
cout<
cout<

void dfs_helper (nó t, mapa &visitado)
visitado [nó] = true;
cout << node <<" " << endl;
para (t vizinho: adjlist [nó])
se(!visitado [vizinho])
dfs_helper (vizinho, visitado);



Void DFS (T SRC)

mapa visitado;
dfs_helper (src, visitado);

;
int main ()
DepthfirstSearch g;
g.Add_edge (0,5);
g.Add_edge (0,7);
g.Add_edge (4,7);
g.Add_edge (7,8);
g.Add_edge (2,1);
g.Add_edge (0,6);
g.Add_edge (2,4);
g.Add_edge (3,2);
g.Add_edge (3,6);
g.Add_edge (7,5);
g.Add_edge (5,8);
g.Prnt ();
g.Dfs (6);
cout << endl;

Neste código, implementamos Dfs algoritmo seguindo o código pseudo -dado acima. Temos 12 pares de nós. Definimos uma classe “G”Que representa um gráfico com vértices A e B que representam nós visitados e não visitados.

Saída

Conclusão

Dfs é um algoritmo de pesquisa popular útil para vários cenários, como encontrar os ciclos em um gráfico e obter informações sobre os componentes conectados ou todos os vértices em um gráfico. Também descrevemos o funcionamento do Dfs método com um exemplo. Dfs emprega pilhas para executar a técnica e também pode ser usado em árvores.