logo

Diferența dintre BFS și DFS

Căutare pe lățimea întâi (BFS) și Căutare în profunzime (DFS) sunt doi algoritmi fundamentali folosiți pentru parcurgerea sau căutarea graficelor și arborilor. Acest articol acoperă diferența de bază dintre Breadth-First Search și Depth-First Search.

bfs-vs-dfs-(1)

Diferența dintre BFS și DFS



Căutare pe lățimea întâi (BFS) :

BFS, Breadth-First Search, este o tehnică bazată pe vârfuri pentru a găsi calea cea mai scurtă din grafic. Folosește a Ieșire:

mașină virtuală java
A, B, C, D, E, F>

Cod:

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; public: Graph(int V); // Constructor // funcție pentru a adăuga o margine la grafic void addEdge(int v, int w);  // afișează traversarea BFS dintr-o sursă dată void BFS(int s); }; Graph::Graph(int V) { this->V = V;  adj = listă nouă [V]; } void Graph::addEdge(int v, int w) { adj[v].push_back(w); // Adăugați w la lista lui v. } void Graph::BFS(int s) { // Marcați toate vârfurile ca nevizitate bool* vizitat = new bool[V];  pentru (int i = 0; i< V; i++)  visited[i] = false;  // Create a queue for BFS  list coadă;  // Marcați nodul curent ca vizitat și puneți-l în coadă [s] = true;  queue.push_back(e);  // 'i' va fi folosit pentru a obține toate nodurile adiacente ale unei // liste de vârfuri ::iteratorul i;  // Creați o mapare de la numere întregi la caractere char map[6] = { 'A', 'B', 'C', 'D', 'E', 'F '};  while (!queue.empty()) { // Scoateți din coadă un vârf din coadă și imprimați-l 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; }>
Piton
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(() =>[]); // Matrice de liste de adiacență } // Funcție pentru a adăuga o margine la grafic addEdge(v, w) { this.adj[v].push(w); // Adăugați w la lista lui v.  } // Funcție pentru a efectua traversarea BFS dintr-o sursă dată s BFS(s) { // Marcați toate nodurile ca nevizitate let vizitate = new Array(this.V).fill(false);  // Creați o coadă pentru BFS let queue = [];  // Marcați nodul curent ca vizitat și puneți-l în coadă [s] = true;  coadă.împinge(e);  // Maparea de la numere întregi la caractere permite mapa = ['A', 'B', 'C', 'D', 'E', 'F'];  while (queue.length> 0) { // Scoateți din coadă un vârf din coadă și imprimați-l s = queue.shift();  console.log(hartă[s] + ' '); // Folosiți maparea pentru a imprima eticheta originală // Obțineți toate nodurile adiacente ale vârfului s scos din coadă // Dacă un adiacent nu a fost vizitat, atunci marcați-l vizitat // și puneți-l în coadă pentru (lasă i de this.adj[s ]) { if (!vizited[i]) { queue.push(i);  vizitat[i] = adevărat;  } } } } } // Funcția principală function main() { // Creați un grafic dat în diagramă /* A /  B C / /  D E F */ fie 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 este: ');  g.BFS(0); // Porniți BFS de la A (0) } // Rulați funcția principală main();>>>  
Ieșire
Breadth First Traversal is: A B C D E F>

Căutare în profunzime prima (DFS) :

DFS, Profunzime prima căutare , este o tehnică bazată pe margini. Acesta folosește Ieșire:



urfi javed
Vă rog să vedeți și BFS vs DFS pentru arbore binar pentru diferențele pentru o traversare a arborelui binar.