logo

Skillnaden mellan BFS och DFS

Breadth-First Search (BFS) och Depth-First Search (DFS) är två grundläggande algoritmer som används för att korsa eller söka i grafer och träd. Den här artikeln tar upp den grundläggande skillnaden mellan Breadth-First Search och Depth-First Search.

bfs-vs-dfs-(1)

Skillnaden mellan BFS och DFS



Breadth-First Search (BFS) :

BFS, Breadth-First Search, är en vertexbaserad teknik för att hitta den kortaste vägen i grafen. Den använder en Produktion:

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

Koda:

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 // funktion för att lägga till en kant till grafen void addEdge(int v, int w);  // skriver ut BFS-traversal från en given källa s void BFS(int s); }; Graph::Graph(int V) { this->V = V;  adj = ny lista [V]; } void Graph::addEdge(int v, int w) { adj[v].push_back(w); // Lägg till w till vs lista. } void Graph::BFS(int s) { // Markera alla hörn som ej besökta bool* visited = new bool[V];  för (int i = 0; i< V; i++)  visited[i] = false;  // Create a queue for BFS  list kö;  // Markera den aktuella noden som besökt och ställ den i kö[s] = sant;  queue.push_back(s);  // 'i' kommer att användas för att få alla angränsande hörn av en // vertexlista ::iterator i;  // Skapa en mappning från heltal till tecken char map[6] = { 'A', 'B', 'C', 'D', 'E', 'F ' };  while (!queue.empty()) { // Ta ut en vertex från kön och skriv ut den 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; }>
Pytonorm
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(() =>[]); // Array of adjacency lists } // Funktion för att lägga till en kant till grafen addEdge(v, w) { this.adj[v].push(w); // Lägg till w till vs lista.  } // Funktion för att utföra BFS-traversal från en given källa s BFS(s) { // Markera alla hörn som ej besökta låt besökta = new Array(this.V).fill(false);  // Skapa en kö för BFS let queue = [];  // Markera den aktuella noden som besökt och ställ den besökte i kö[s] = sant;  queue.push(s);  // Mappning från heltal till tecken låter mappa = ['A', 'B', 'C', 'D', 'E', 'F'];  while (queue.length> 0) { // Ta ut en vertex från kön och skriv ut den s = queue.shift();  console.log(map[s] + ' '); // Använd mappningen för att skriva ut den ursprungliga etiketten // Hämta alla intilliggande hörn av det köade hörnet s // Om en angränsande inte har besökts, markera den som besökt // och ställ den i kö för (låt i av this.adj[s ]) { if (!besökt[i]) { queue.push(i);  besökt[i] = sant;  } } } } } // Huvudfunktionsfunktion main() { // Skapa en graf som ges i diagrammet /* A /  B C / /  D E F */ let 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('Bredth First Traversal är: ');  g.BFS(0); // Starta BFS från A (0) } // Kör huvudfunktionen main();>

Produktion
Breadth First Traversal is: A B C D E F>

Depth First Search (DFS) :

DFS, Djup första sökning , är en kantbaserad teknik. Den använder Produktion:



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

Skillnaden mellan BFS och DFS:

ParametrarBFSDFS
Står förBFS står för Breadth First Search.DFS står för Depth First Search.
DatastrukturBFS (Bredth First Search) använder ködatastruktur för att hitta den kortaste vägen.DFS (Depth First Search) använder stackdatastruktur.
DefinitionBFS är en genomgångsmetod där vi först går igenom alla noder på samma nivå innan vi går vidare till nästa nivå.DFS är också en traversering där traversen börjar vid rotnoden och fortsätter genom noderna så långt som möjligt tills vi når noden utan obesökta närliggande noder.
Konceptuell skillnadBFS bygger trädet nivå för nivå.DFS bygger trädets underträd för underträd.
Tillvägagångssätt användsDet fungerar på konceptet FIFO (First In First Out).Det fungerar på konceptet LIFO (Last In First Out).
Lämplig förBFS är mer lämpligt för att söka hörn närmare den givna källan.DFS är mer lämpligt när det finns lösningar borta från källan.
AnsökningarBFS används i olika applikationer som tvådelade grafer, kortaste vägar, etc.DFS används i olika applikationer som acykliska grafer och att hitta starkt sammankopplade komponenter etc.

Se också BFS vs DFS för binärt träd för skillnaderna för en binär trädgenomgång.