En DFS, Los nodos que se exploran se almacenan en una estructura de datos de pila. Los bordes que nos dirigen a nodos inexplorados se llaman 'Bordes de descubrimiento'Mientras los bordes van a liderar los nodos ya visitados se llaman'bordes de bloque'. DFS es útil en escenarios cuando un programador quiere encontrar componentes o ciclos conectados en un gráfico.
Siga las pautas de este artículo para implementar DFS Cª++.
Implementación de DFS en C++
En la siguiente sección, revisaremos cómo DFS se implementa en c++. Uno puede seguir los pasos dados para implementar DFS.
Pseudocódigo DFS
El DFS El seudocódigo se muestra a continuación. En el en eso() función, ejecutamos nuestro DFS función en cada nodo. Debido a que el gráfico puede tener dos partes desconectadas, podemos ejecutar el DFS algoritmo en cada nodo para garantizar que hayamos cubierto cada vértice.
DFS (G A)
a.visitado = verdadero
por cada b ∈ G.Adj [a]
Si b.visitado == falso
DFS (G, B)
en eso()
Por cada a ∈ G
a.visitado = falso
Por cada a ∈ G
DFS (G, A)
Aquí G, A y B representan el gráfico, el nodo y el nodo visitado por primera vez en la pila respectivamente.
Implementación de DFS en C++
Un programa C ++ para DFS La implementación se proporciona a continuación:
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
plantilla
clase de profundidad de clase
privado:
mapa> adjlist;
público:
ProfundidadFirstSearch ()
void add_edge (t a, t b, bool dir = true)
adjlist [a].push_back (b);
if (dir)
adjlist [b].push_back (a);
void prnt ()
para (auto i: adjlist)
cout<";
para (entrada t: yo.segundo)
cout<
cout<
Void dfs_helper (nodo t, mapa&visitado)
visitado [nodo] = true;
cout << node <<" " << endl;
para (t vecino: adjlist [nodo])
si(!visitado [vecino])
dfs_helper (vecino, visitado);
DFS vacío (T SRC)
mapavisitado;
dfs_helper (src, visitado);
;
int main ()
Profundidad de investigacióngramo;
gramo.Add_edge (0,5);
gramo.Add_edge (0,7);
gramo.Add_edge (4,7);
gramo.Add_edge (7,8);
gramo.Add_edge (2,1);
gramo.Add_edge (0,6);
gramo.Add_edge (2,4);
gramo.Add_edge (3,2);
gramo.Add_edge (3,6);
gramo.Add_edge (7,5);
gramo.Add_edge (5,8);
gramo.Prnt ();
gramo.Dfs (6);
cout << endl;
En este código, hemos implementado DFS Algoritmo después del código pseudo dado anteriormente. Tenemos 12 pares de nodos. Definimos una clase "GRAMO"Que representa un gráfico que tiene vértices A y B que representan nodos visitados y no visitados.
Producción
Conclusión
DFS es un algoritmo de búsqueda popular útil para varios escenarios, como encontrar los ciclos en un gráfico y obtener información sobre los componentes conectados o todos los vértices en un gráfico. También describimos el funcionamiento del DFS Método con un ejemplo. DFS emplea pilas para ejecutar la técnica y también se puede usar en árboles.