Share BFS C++: Thuật Toán Duyệt Theo Chiều Rộng Trong C++

phammaipanama

New member
#BFS #C ++ #tìm kiếm đầu tiên #graph #algorithms ## BFS trong C ++: Thuật toán tìm kiếm đầu tiên trong C ++ trong C ++

Tìm kiếm đầu tiên (BFS) là một thuật toán để đi qua hoặc tìm kiếm cấu trúc dữ liệu đồ thị.Nó bắt đầu ở một nút được chỉ định (gốc) và khám phá tất cả các nút được kết nối trực tiếp với nút gốc trước khi khám phá các nút xa hơn.Quá trình này tiếp tục cho đến khi tất cả các nút trong biểu đồ đã được truy cập.

BFS là một bộ truyền hình ** đầu tiên ** vì nó khám phá các nút trong các lớp, bắt đầu với các nút gần nút gốc nhất.Điều này trái ngược với tìm kiếm độ sâu đầu tiên (DFS), khám phá các nút theo cách ** độ sâu đầu tiên **, bắt đầu với các nút xa nhất từ nút gốc.

BFS là một thuật toán truyền tải đồ thị ** được kết nối **, có nghĩa là nó sẽ truy cập tất cả các nút trong một biểu đồ được kết nối.Tuy nhiên, nó không phải là một thuật toán truyền tải đồ thị hoàn chỉnh **, điều đó có nghĩa là nó có thể không truy cập tất cả các nút trong một biểu đồ bị ngắt kết nối.

BFS là một thuật toán ** đơn giản ** và ** hiệu quả ** có thể được sử dụng để tìm đường dẫn ngắn nhất giữa hai nút trong biểu đồ.Nó cũng có thể được sử dụng để tìm tất cả các thành phần được kết nối trong một biểu đồ.

### Triển khai BFS trong C ++

Sau đây là việc triển khai BFS trong C ++:

`` `C ++
#include <Istream>
#include <Vector>

sử dụng không gian tên STD;

// Một biểu đồ được biểu diễn dưới dạng danh sách kề.
// Mỗi nút trong biểu đồ được biểu thị bằng một số.
// Danh sách kề của một nút chứa số của tất cả các nút được kết nối trực tiếp với nó.

Biểu đồ cấu trúc {
trong TV;// Số lượng các đỉnh trong biểu đồ
Vector <Vector <int >> adj;// Danh sách kề của biểu đồ
};

// Hàm này tạo ra một biểu đồ với số lượng đỉnh đã cho.

Đồ thị creategraph (int v) {
Đồ thị g;
g.v = v;
g.adj.resize (v);
trả lại g;
}

// Hàm này thêm một cạnh giữa hai đỉnh đã cho trong biểu đồ.

void addEdge (đồ thị & g, int u, int v) {
g.adj .push_back (v);
g.adj [v] .push_back (u);
}

// Hàm này thực hiện tìm kiếm đầu tiên trên biểu đồ đã cho bắt đầu từ đỉnh nguồn đã cho.

void bfs (đồ thị & g, int s) {
// Tạo một hàng đợi để lưu trữ các đỉnh đã truy cập.

Hàng đợi <Int> q;

// Đánh dấu đỉnh nguồn như đã truy cập.

Q.Push (s);
g.Visited = true;

// Trong khi hàng đợi không trống, hãy làm như sau:

while (! q.empty ()) {
// dequeue phần tử phía trước của hàng đợi.

int u = q.front ();
Q.Pop ();

// In các đỉnh dequeued.

cout << u << "";

// Đối với mỗi đỉnh liền kề của đỉnh dequeued, hãy làm như sau:

for (int v: g.adj ) {
// Nếu đỉnh liền kề không được truy cập, hãy đánh dấu nó như đã truy cập và thêm nó vào hàng đợi.

if (! g.visited [v]) {
g.Visited [v] = true;
Q.Push (v);
}
}
}
}

// Mã trình điều khiển

int main () {
// Tạo biểu đồ với 5 đỉnh.

Đồ thị g = creategraph (5);

// Thêm các cạnh vào biểu đồ.

addEdge (g, 0, 1);
addEdge (g, 0, 2);
addedge (g, 1, 2);
AddEdge (g, 1, 3);
addedge (g, 2
=======================================
#BFS #C++ #breadth-first search #graph #algorithms ## BFS in C++: Breadth-first search algorithm in C++

Breadth-first search (BFS) is an algorithm for traversing or searching a graph data structure. It starts at a designated node (the root) and explores all of the nodes that are directly connected to the root node before exploring nodes that are further away. This process continues until all nodes in the graph have been visited.

BFS is a **breadth-first** traversal because it explores the nodes in layers, starting with the nodes that are closest to the root node. This is in contrast to depth-first search (DFS), which explores the nodes in a **depth-first** manner, starting with the nodes that are furthest from the root node.

BFS is a **connected** graph traversal algorithm, which means that it will visit all of the nodes in a connected graph. However, it is not a **complete** graph traversal algorithm, which means that it may not visit all of the nodes in a disconnected graph.

BFS is a **simple** and **efficient** algorithm that can be used to find the shortest path between two nodes in a graph. It can also be used to find all of the connected components in a graph.

### Implementation of BFS in C++

The following is an implementation of BFS in C++:

```c++
#include <iostream>
#include <vector>

using namespace std;

// A graph is represented as an adjacency list.
// Each node in the graph is represented by a number.
// The adjacency list of a node contains the numbers of all the nodes that are directly connected to it.

struct Graph {
int V; // Number of vertices in the graph
vector<vector<int>> adj; // Adjacency list of the graph
};

// This function creates a graph with the given number of vertices.

Graph createGraph(int V) {
Graph g;
g.V = V;
g.adj.resize(V);
return g;
}

// This function adds an edge between the two given vertices in the graph.

void addEdge(Graph &g, int u, int v) {
g.adj.push_back(v);
g.adj[v].push_back(u);
}

// This function performs a breadth-first search on the given graph starting from the given source vertex.

void BFS(Graph &g, int s) {
// Create a queue to store the visited vertices.

queue<int> q;

// Mark the source vertex as visited.

q.push(s);
g.visited = true;

// While the queue is not empty, do the following:

while (!q.empty()) {
// Dequeue the front element of the queue.

int u = q.front();
q.pop();

// Print the dequeued vertex.

cout << u << " ";

// For each of the adjacent vertices of the dequeued vertex, do the following:

for (int v : g.adj) {
// If the adjacent vertex is not visited, mark it as visited and add it to the queue.

if (!g.visited[v]) {
g.visited[v] = true;
q.push(v);
}
}
}
}

// Driver code

int main() {
// Create a graph with 5 vertices.

Graph g = createGraph(5);

// Add edges to the graph.

addEdge(g, 0, 1);
addEdge(g, 0, 2);
addEdge(g, 1, 2);
addEdge(g, 1, 3);
addEdge(g, 2
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top