目录
BFS搜索(广度优先搜索)
讲解
BFS搜索算法原理
BFS搜索算法实现
BFS搜索算法的应用
例题(1)
P1032 [NOIP 2002 提高组] 字串变换
例题(2)
P1443 马的遍历
BFS搜索(广度优先搜索)
讲解
BFS搜索算法原理
广度优先搜索(BFS)算法是一种图的搜索算法,用于遍历图中的节点,并找到图中的路径。BFS算法从起始节点开始,逐层搜索直到找到目标节点,它以层级的方式搜索图,先搜索与起始节点直接相邻的节点,然后再搜索与这些节点相邻的节点,以此类推,直到找到目标节点或遍历完整个图。
BFS算法通常使用队列来实现,它先将起始节点入队,然后不断从队列中取出节点,访问这个节点,并将这个节点的邻接节点入队,直到队列为空。这样可以确保先访问距离起始节点近的节点,再访问距离起始节点远的节点,实现广度优先搜索。
BFS搜索算法实现
在C++中,我们可以用队列来实现BFS搜索算法。下面是一个简单的示例代码,展示了如何用队列实现BFS搜索算法:
#include <iostream>
#include <vector>
#include <queue>using namespace std;class Graph {
private:int V;vector<Node*> adjList;public:Graph(int v) : V(v) {adjList.resize(V, nullptr);}void addEdge(int src, int dest) {Node* newNode = new Node(dest);newNode->next = adjList[src];adjList[src] = newNode;newNode = new Node(src);newNode->next = adjList[dest];adjList[dest] = newNode;}void BFS(int v) {vector<bool> visited(V, false);queue<int> queue;visited[v] = true;queue.push(v);while (!queue.empty()) {v = queue.front();queue.pop();cout << v << " ";Node* temp = adjList[v];while (temp) {int adjNode = temp->val;if (!visited[adjNode]) {visited[adjNode] = true;queue.push(adjNode);}temp = temp->next;}}}
};int main() {Graph graph(5);graph.addEdge(0, 1);graph.addEdge(0, 4);graph.addEdge(1, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.ad