logo

Ero BFS:n ja DFS:n välillä

Breadth-First Search (BFS) ja Depth-First Search (DFS) ovat kaksi perusalgoritmia, joita käytetään kaavioiden ja puiden kulkemiseen tai etsimiseen. Tämä artikkeli kattaa peruseron Breadth-First-haun ja Syvyys-ensihaun välillä.

bfs-vs-dfs-(1)

Ero BFS:n ja DFS:n välillä



Breadth-First Search (BFS) :

BFS, Breadth-First Search, on huippupistepohjainen tekniikka kaavion lyhimmän polun löytämiseksi. Se käyttää a Lähtö:

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

Koodi:

kuinka muuntaa merkkijono kokonaisluvuksi javassa
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; julkinen: Graph(int V); // Rakentaja // funktio reunan lisäämiseksi graafiin void addEdge(int v, int w);  // tulostaa BFS-traversalin tietystä lähteestä s void BFS(int s); }; Kaavio::Kaavio(int V) { this->V = V;  adj = uusi lista [V]; } void Graph::lisääEdge(int v, int w) { adj[v].push_back(w); // Lisää w v:n luetteloon. } void Graph::BFS(int s) { // Merkitse kaikki kärjet ei-käydyiksi bool* vieraili = uusi bool[V];  for (int i = 0; i< V; i++)  visited[i] = false;  // Create a queue for BFS  list jonottaa;  // Merkitse nykyinen solmu vierailluksi ja lisää se vieraillun jonoon [s] = true;  queue.push_back(s);  // Komentoa 'i' käytetään saamaan // vertex-listan kaikki vierekkäiset pisteet ::iteraattori i;  // Luo määritys kokonaisluvuista merkkeihin char map[6] = { 'A', 'B', 'C', 'D', 'E', 'F '};  while (!queue.empty()) { // Pura kärki jonosta ja tulosta se 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(() =>[]); // Vierekkäisyysluetteloiden joukko } // Funktio, jolla graafiin lisätään reuna addEdge(v, w) { this.adj[v].push(w); // Lisää w v:n luetteloon.  } // Toiminto suorittaa BFS-läpikulku tietystä lähteestä s BFS(s) { // Merkitse kaikki kärjet ei-käydyiksi anna visited = new Array(this.V).fill(false);  // Luo jono BFS:lle anna queue = [];  // Merkitse nykyinen solmu vierailluksi ja jonoon se vieraili[s] = true;  queue.push(s);  // Yhdistäminen kokonaisluvuista merkkeihin anna map = ['A', 'B', 'C', 'D', 'E', 'F'];  while (queue.length> 0) { // Pura kärki jonosta ja tulosta se s = queue.shift();  console.log(kartta[s] + ' '); // Käytä kartoitusta tulostaaksesi alkuperäinen tarra // Hae kaikki vierekkäiset kärkijonosta poistetun kärjen s // Jos viereisessä ei ole vierailtu, merkitse se vierailluksi // ja aseta se jonoon (olkoon tämän.adj[s ]) { if (!vieraillut[i]) { jono.push(i);  vierailtu[i] = tosi;  } } } } } // Pääfunktiofunktio main() { // Luo kaaviossa annettu kaavio /* A /  B C / /  D E F */ anna 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 on: ');  g.BFS(0); // Käynnistä BFS kohdasta A (0) } // Suorita pääfunktio main();>>  
Lähtö
Breadth First Traversal is: A B C D E F>

Syvyys ensimmäinen haku (DFS) :

DFS, Syvyys ensimmäinen haku , on reunapohjainen tekniikka. Se käyttää Lähtö:



Katso myös BFS vs DFS binääripuulle binaaripuun läpikäymisen eroista.