Come implementare la ricerca di profondità prima in c ++

Come implementare la ricerca di profondità prima in c ++
Profondità prima ricerca (DFS) è un potente algoritmo ricorsivo utilizzato per cercare tutti i nodi di un grafico o un albero nella struttura dei dati. Inizia la sua ricerca selezionando un vertice specifico e quindi inizia a esplorare il grafico il più possibile lungo ogni ramo prima del backtracking. Il backtracking si verifica ogni volta che il Dfs L'algoritmo si avvicina a un nodo che non ha vicini da visitare. Quando si avvicina a un nodo senza vicini, ripercorre i suoi passi al nodo precedente.

In Dfs, I nodi esplorati sono archiviati in una struttura di dati dello stack. I bordi che ci indirizzano verso nodi inesplorati sono chiamati 'bordi di scoperta"Mentre i bordi che vanno a guidare i nodi già visitati sono chiamati"bordi'. Dfs è utile negli scenari quando un programmatore vuole trovare componenti o cicli connessi in un grafico.

Segui le linee guida di questo articolo da implementare Dfs in c++.

Implementazione di DFS in C++

Nella sezione seguente, esamineremo come Dfs è implementato in C++. Si possono seguire i passaggi forniti per implementare Dfs.

  1. Inserire il nodo radice di un albero o grafico nello stack.
  2. Aggiungi l'elemento superiore dello stack alla tua lista visitata.
  3. Scopri tutti i nodi adiacenti al nodo visitato e aggiungi quei nodi che non hanno ancora visitato lo stack.
  4. Ripeti i passaggi 2 e 3 fino a quando lo stack è vuoto.

Pseudocodice DFS

IL Dfs Lo pseudocodico è mostrato di seguito. Nel dentro() funzione, eseguiamo il nostro Dfs funzione su ciascun nodo. Poiché il grafico può avere due parti disconnesse, possiamo eseguire il Dfs algoritmo su ciascun nodo per garantire che abbiamo coperto ogni vertice.

Dfs (g a)
UN.visitato = vero
per ogni b ∈ G.Agg [a]
Se b.visitato == false
DFS (G, B)
dentro()

Per ogni a ∈ G
UN.visitato = false
Per ogni a ∈ G
Dfs (g, a)

Qui G, A e B rappresentano il grafico, il nodo e il nodo visitato per la prima volta nello stack rispettivamente.

Implementazione di DFS in C++

Un programma C ++ per Dfs L'implementazione è riportata di seguito:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
modello
Classe DepthFirstSearch

privato:
carta geografica > AdjList;
pubblico:
DepthFirstSearch ()
void add_edge (t a, t b, bool dir = true)

AdjList [a].push_back (b);
if (dir)

AdjList [B].push_back (a);


void prnt ()

per (auto I: adjList)
cout<";
per (t entry: i.secondo)
cout<
cout<

void dfs_helper (nodo t, mappa e visitato)
visitato [nodo] = true;
cout << node <<" " << endl;
per (t vicino: adjList [nodo])
Se(!Visited [Neighbor])
dfs_helper (vicino, visitato);



void DFS (T SRC)

carta geografica visitato;
dfs_helper (SRC, visitato);

;
int main ()
Profondità 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;

In questo codice, abbiamo implementato Dfs algoritmo seguendo il codice pseudo indicato sopra. Abbiamo 12 paia di nodi. Abbiamo definito una classe "G"Che rappresenta un grafico con vertici a e b che rappresentano nodi visitati e non visitati.

Produzione

Conclusione

Dfs è un algoritmo di ricerca popolare utile per diversi scenari, come trovare i cicli in un grafico e ottenere informazioni sui componenti connessi o tutti i vertici in un grafico. Abbiamo anche descritto il funzionamento del Dfs Metodo con un esempio. Dfs impiega pile per eseguire la tecnica e può anche essere utilizzato sugli alberi.