freeCodeCamp/guide/spanish/algorithms/graph-algorithms/depth-first-search/index.md

4.1 KiB

title localeTitle
Depth First Search (DFS) Primera búsqueda de profundidad (DFS)

Primera búsqueda de profundidad (DFS)

Depth First Search es uno de los algoritmos gráficos más simples. Atraviesa el gráfico, primero verifica el nodo actual y luego se mueve a uno de sus sucesores para repetir el proceso. Si el nodo actual no tiene un sucesor para verificar, volvemos a su predecesor y el proceso continúa (al pasar a otro sucesor). Si se encuentra la solución, la búsqueda se detiene.

Visualización

Implementación (C ++ 14)

`` `c ++

incluir

incluir

incluir

incluir

utilizando namespace std;

clase grafica { En televisión; // número de vértices

// pointer to a vector containing adjacency lists 
 vector < int > *adj; 

público: Gráfico (int v); // Constructor

// function to add an edge to graph 
 void add_edge(int v, int w); 
 
 // prints dfs traversal from a given source `s` 
 void dfs(); 
 void dfs_util(int s, vector < bool> &visited); 

};

Graph :: Graph (int v) { esto -> v = v; adj = nuevo vector [v]; }

void Graph :: add edge (int u, int v) { adj [u]. empujar hacia atrás (v); // agregar v a la lista de u adj [v] .push atrás (v); // agregar u a la lista de v (elimine esta declaración si se dirige el gráfico) } Gráfica de vacío: dfs () { // vector visitado - para realizar un seguimiento de los nodos visitados durante DFS vector visitado (v, falso); // marcando todos los nodos / vértices como no visitados para (int i = 0; i <v; i ++) si (! visitó [i]) dfs util (i, visitó); } // ¡note el uso de llamada por referencia aquí! void Graph :: dfs_util (int s, vector & visited) { // marca el nodo / vértice actual como visitado visitó [s] = verdadero; // salida a la salida estándar (pantalla) cout << s << "";

// traverse its adjacency list and recursively call dfs_util for all of its neighbours! 
 // (only if the neighbour has not been visited yet!) 
 for(vector < int > :: iterator itr = adj[s].begin(); itr != adj[s].end(); itr++) 
    if(!visited[*itr]) 
        dfs_util(*itr, visited); 

}

int main () { // crear un gráfico utilizando la clase de gráfico que definimos anteriormente Gráfica g (4); borde g.add (0, 1); borde g.add (0, 2); g.add borde (1, 2); borde g.add (2, 0); g.add borde (2, 3); g.add borde (3, 3);

cout << "Following is the Depth First Traversal of the provided graph" 
     << "(starting from vertex 0): "; 
 g.dfs(); 
 // output would be: 0 1 2 3 
 return 0; 

}

### Evaluation 
 
 Space Complexity: O(n) 
 
 Worse Case Time Complexity: O(n) 
 Depth First Search is complete on a finite set of nodes. I works better on shallow trees. 
 
 ### Implementation of DFS in C++ 

c ++

incluir

incluir

incluir

utilizando namespace std;

struct Graph { En televisión; bool * adj; público: Gráfico (int vcount); void addEdge (int u, int v); void deleteEdge (int u, int v); vector DFS (int s); void DFSUtil (int s, vector & dfs, vector &visitó); }; Graph :: Graph (int vcount) { esto-> v = vcount; this-> adj = new bool [vcount]; para (int i = 0; i

void Graph :: addEdge (int u, int w) { this-> adj [u] [w] = true; this-> adj [w] [u] = true; }

void Graph :: deleteEdge (int u, int w) { esto-> adj [u] [w] = falso; esto-> adj [w] [u] = falso; }

Void Graph :: DFSUtil (int s, vector & dfs, vector &visitó){ visitó [s] = verdadero; dfs.push_back (s); para (int i = 0; i v; i ++) { if (this-> adj [s] [i] == true && visitó [i] == false) DFSUtil (i, dfs, visitó); } }

vector Graph :: DFS (int s) { vector visitado (this-> v); vector dfs; DFSUtil (s, dfs, visitó); devuelve dfs; } `` `

Más información:

Graficas

Primera búsqueda de amplitud (BFS)

Primera búsqueda en profundidad (DFS) - Wikipedia