📜  bfs sudocode - C++ (1)

📅  最后修改于: 2023-12-03 15:13:39.167000             🧑  作者: Mango

BFS算法介绍

BFS(广度优先搜索)是一个基于队列的算法,用于图形搜索领域。它被用于社交网络中的连通组件、地图渲染、语法分析等多个领域。BFS 从一个根节点开始,将它的所有相邻节点加入队列中。现在,将这些节点全部取出,以相同的方式扩展第二层节点。处理完第二层节点之后,BFS 继续扩展第三层节点,以此类推,直到找到符合要求的节点。

BFS 代码Python示例

下面给出BFS算法的Python示例代码片段。

from collections import deque

def bfs(graph, root):
    visited, queue = set(), deque([root])
    visited.add(root)
    while queue:
        vertex = queue.popleft()
        print(str(vertex) + " ", end="")
        for neighbour in graph[vertex]:
            if neighbour not in visited:
                visited.add(neighbour)
                queue.append(neighbour)
调用BFS函数

在下面代码段中,我们创建了一个简单的图形来使用 BFS 函数。我们从节点0开始遍历,然后遍历它的相邻节点。

graph = {0: [1, 2], 1: [2], 2: [3], 3: [1, 2]}
bfs(graph, 0)
BFS C++代码示例

下面给出BFS算法的C++示例代码片段。

#include <iostream>
#include <list>

using namespace std;

class Graph {
    int numVertices;
    list<int> *adjLists;
    bool *visited;
public:
    Graph(int V);
    void addEdge(int src, int dest);
    void BFS(int startVertex);
};

Graph::Graph(int vertices) {
    numVertices = vertices;
    adjLists = new list<int>[vertices];
    visited = new bool[vertices];
}

void Graph::addEdge(int src, int dest) {
    adjLists[src].push_back(dest);
    adjLists[dest].push_back(src);
}

void Graph::BFS(int startVertex) {
    for(int i = 0; i < numVertices; i++)
        visited[i] = false;

    list<int> queue;

    visited[startVertex] = true;
    queue.push_back(startVertex);

    list<int>::iterator i;

    while(!queue.empty()) {
        int currVertex = queue.front();
        cout << "Visited " << currVertex << " ";
        queue.pop_front();

        for(i = adjLists[currVertex].begin(); i != adjLists[currVertex].end(); ++i) {
            int adjVertex = *i;
            if(!visited[adjVertex]) {
                visited[adjVertex] = true;
                queue.push_back(adjVertex);
            }
        }
    }
}

int main() {
    Graph g(4);
    g.addEdge(0, 1);
    g.addEdge(0, 2);
    g.addEdge(1, 2);
    g.addEdge(2, 3);

    g.BFS(0);

    return 0;
}
调用BFS函数

在下面代码段中,我们创建了一个简单的图形,如下所示,使用 BFS 函数。我们从节点0开始遍历,然后遍历它的相邻节点。

     1 -- 2
    /      \
   0        3
int main() {
    Graph g(4);
    g.addEdge(0, 1);
    g.addEdge(0, 2);
    g.addEdge(1, 2);
    g.addEdge(2, 3);

    g.BFS(0);

    return 0;
}
总结

BFS算法是图形搜索中最基本、最常用的算法之一。在实践中,它们通常与其他算法(如深度优先搜索)结合使用,以获得更好的结果。这篇文章提供了Python和C++版本的BFS算法示例,可以为开发者提供启发。