logo

Diferència entre BFS i DFS

Cerca d'amplada primer (BFS) i Cerca en profunditat (DFS) són dos algorismes fonamentals utilitzats per recórrer o cercar gràfics i arbres. Aquest article cobreix la diferència bàsica entre la cerca en primer lloc i la cerca en profunditat.

bfs-vs-dfs-(1)

Diferència entre BFS i DFS



python ordenant tuples

Cerca d'amplada primer (BFS) :

BFS, cerca d'amplada primer, és una tècnica basada en vèrtex per trobar el camí més curt del gràfic. Utilitza a Sortida:

A, B, C, D, E, F>

Codi:

C++
#include  #include  using namespace std; // This class represents a directed graph using adjacency // list representation class Graph {  int V; // No. of vertices  // Pointer to an array containing adjacency lists  list * adj; públic: Graph(int V); // Constructor // funció per afegir una vora al gràfic void addEdge(int v, int w);  // imprimeix el recorregut BFS des d'una font donada void BFS(int s); }; Graph::Graph(int V) { this->V = V;  adj = llista nova [V]; } void Graph::addEdge(int v, int w) { adj[v].push_back(w); // Afegeix w a la llista de v. } void Graph::BFS(int s) { // Marca tots els vèrtexs com a no visitats bool* visited = new bool[V];  per (int i = 0; i< V; i++)  visited[i] = false;  // Create a queue for BFS  list cua;  // Marca el node actual com a visitat i posa a la cua el que ha visitat[s] = true;  queue.push_back(s);  // S'utilitzarà 'i' per obtenir tots els vèrtexs adjacents d'una // llista de vèrtexs ::iterador i;  // Crea un mapeig de nombres enters a caràcters mapa de caràcters[6] = { 'A', 'B', 'C', 'D', 'E', 'F '};  while (!queue.empty()) { // Treu un vèrtex de la cua i imprimeix-lo s = queue.front();  cout<< map[s] << ' '; // Use the mapping to print  // the original label  queue.pop_front();  // Get all adjacent vertices of the dequeued vertex  // s If a adjacent has not been visited, then mark  // it visited and enqueue it  for (i = adj[s].begin(); i != adj[s].end(); ++i) {  if (!visited[*i]) {  queue.push_back(*i);  visited[*i] = true;  }  }  } } int main() {  // Create a graph given in the diagram  /* A  /   B C  / /   D E F  */  Graph g(6);  g.addEdge(0, 1);  g.addEdge(0, 2);  g.addEdge(1, 3);  g.addEdge(2, 4);  g.addEdge(2, 5);  cout << 'Breadth First Traversal is: ';  g.BFS(0); // Start BFS from A (0)  return 0; }>
Python
from collections import deque # This class represents a directed graph using adjacency list representation class Graph: def __init__(self, V): self.V = V # No. of vertices self.adj = [[] for _ in range(V)] # Adjacency lists # Function to add an edge to graph def addEdge(self, v, w): self.adj[v].append(w) # Add w to v’s list # Prints BFS traversal from a given source s def BFS(self, s): # Mark all the vertices as not visited visited = [False] * self.V # Create a queue for BFS queue = deque() # Mark the current node as visited and enqueue it visited[s] = True queue.append(s) # Create a mapping from integers to characters mapping = ['A', 'B', 'C', 'D', 'E', 'F'] while queue: # Dequeue a vertex from queue and print it s = queue.popleft() # Use the mapping to print the original label print(mapping[s], end=' ') # Get all adjacent vertices of the dequeued vertex s # If an adjacent has not been visited, then mark it visited # and enqueue it for i in self.adj[s]: if not visited[i]: queue.append(i) visited[i] = True if __name__ == '__main__': # Create a graph given in the diagram # A # /  # B C # / /  # D E F g = Graph(6) g.addEdge(0, 1) g.addEdge(0, 2) g.addEdge(1, 3) g.addEdge(2, 4) g.addEdge(2, 5) print('Breadth First Traversal is: ', end='') g.BFS(0) # Start BFS from A (0)>
JavaScript
// This class represents a directed graph using adjacency list representation class Graph {  constructor(V) {  this.V = V; // No. of vertices  this.adj = new Array(V).fill(null).map(() =>[]); // Matriu de llistes d'adjacència } // Funció per afegir una vora al gràfic addEdge(v, w) { this.adj[v].push(w); // Afegeix w a la llista de v.  } // Funció per dur a terme un recorregut BFS des d'una font donada s BFS(s) { // Marca tots els vèrtexs com a no visitats let visited = new Array(this.V).fill(false);  // Crear una cua per a BFS let queue = [];  // Marca el node actual com a visitat i posa a la cua el que ha visitat[s] = true;  queue.push(s);  // L'assignació de nombres enters a caràcters permet el mapa = ['A', 'B', 'C', 'D', 'E', 'F'];  while (queue.length> 0) { // Treu un vèrtex de la cua i imprimeix-lo s = queue.shift();  console.log(mapa[s] + ' '); // Utilitzeu el mapeig per imprimir l'etiqueta original // Obteniu tots els vèrtexs adjacents del vèrtex descuat s // Si no s'ha visitat cap adjacent, marqueu-lo com a visitat // i poseu-lo a la cua per (deixeu i de this.adj[s ]) { if (!visitat[i]) { queue.push(i);  visitat[i] = cert;  } } } } } // Funció principal function main() { // Crea un gràfic donat al diagrama /* A /  B C / /  D E F */ deixa g = new Graph(6);  g.addEdge(0, 1);  g.addEdge(0, 2);  g.addEdge(1, 3);  g.addEdge(2, 4);  g.addEdge(2, 5);  console.log('Breadth First Traversal és: ');  g.BFS(0); // Inicieu BFS des de A (0) } // Executeu la funció principal main();>>>  
Sortida
Breadth First Traversal is: A B C D E F>

Primera cerca en profunditat (DFS) :

DFS, Primera recerca en profunditat , és una tècnica basada en la vora. Fa servir el Sortida:



DFS (Depth First Search) utilitza l'estructura de dades Stack.DefinicióBFS és un enfocament transversal en el qual primer passem per tots els nodes del mateix nivell abans de passar al següent nivell.DFS també és un enfocament transversal en el qual la travessa comença al node arrel i continua a través dels nodes tant com sigui possible fins que arribem al node sense nodes propers no visitats.Diferència conceptualBFS construeix l'arbre nivell per nivell.DFS construeix l'arbre subarbre per subarbre.Enfocament utilitzatTreballa el concepte de FIFO (First In First Out).Treballa sobre el concepte de LIFO (Last In First Out).Adequat perBFS és més adequat per cercar vèrtexs més propers a la font donada.DFS és més adequat quan hi ha solucions fora de la font.AplicacionsBFS s'utilitza en diverses aplicacions com ara gràfics bipartits, camins més curts, etc.DFS s'utilitza en diverses aplicacions, com ara gràfics acíclics i trobar components fortament connectats, etc.

Si us plau, mireu també BFS vs DFS per a l'arbre binari per a les diferències per a una travessia d'arbre binari.