c++广度优先搜索思路及模板
时间: 2023-08-09 10:11:52 浏览: 115
C++中的广度优先搜索(BFS)与Python的思路相似,同样使用队列来实现。下面是C++的BFS思路及模板:
```cpp
#include <iostream>
#include <queue>
#include <unordered_set>
#include <vector>
using namespace std;
bool bfs(vector<vector<int>>& graph, int start, int target) {
queue<int> q;
q.push(start);
unordered_set<int> visited;
visited.insert(start);
while (!q.empty()) {
int current_node = q.front();
q.pop();
// 判断是否找到目标节点
if (current_node == target) {
return true;
}
// 将当前节点的未访问相邻节点加入队列
for (int neighbor : graph[current_node]) {
if (visited.find(neighbor) == visited.end()) {
q.push(neighbor);
visited.insert(neighbor);
}
}
}
return false;
}
int main() {
// 创建图
vector<vector<int>> graph = {{1, 2}, {2, 3}, {3, 4}, {4}, {}};
int start = 0;
int target = 3;
bool found = bfs(graph, start, target);
if (found) {
cout << "Target node is reachable from the start node." << endl;
} else {
cout << "Target node is not reachable from the start node." << endl;
}
return 0;
}
```
在上述示例中,`graph`是一个二维向量,表示图的邻接关系;`start`是起始节点;`target`是目标节点。
你可以根据具体的问题定义自己的图,并调用`bfs`函数进行搜索。需要注意的是,C++中使用`std::queue`作为队列,使用`std::unordered_set`表示已访问节点的集合。同样,如果节点具有其他属性,可以根据实际情况进行修改。
阅读全文