c++广度优先搜索代码
时间: 2024-04-07 15:25:51 浏览: 63
C++实现广度优先搜索实例
C++中的广度优先搜索(BFS)是一种用于图形遍历的算法。它从给定的起始节点开始,逐层遍历图形中的节点,直到找到目标节点或遍历完整个图形。下面是一个简单的C++代码示例来实现广度优先搜索:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 图形的节点结构
struct Node {
int value;
vector<Node*> neighbors;
};
// 广度优先搜索函数
void BFS(Node* startNode, int targetValue) {
queue<Node*> q;
vector<Node*> visited;
q.push(startNode);
visited.push_back(startNode);
while (!q.empty()) {
Node* currentNode = q.front();
q.pop();
if (currentNode->value == targetValue) {
cout << "目标节点已找到!" << endl;
return;
}
for (Node* neighbor : currentNode->neighbors) {
if (find(visited.begin(), visited.end(), neighbor) == visited.end()) {
q.push(neighbor);
visited.push_back(neighbor);
}
}
}
cout << "未找到目标节点!" << endl;
}
int main() {
// 创建图形节点
Node* node1 = new Node{1};
Node* node2 = new Node{2};
Node* node3 = new Node{3};
Node* node4 = new Node{4};
Node* node5 = new Node{5};
// 构建图形关系
node1->neighbors.push_back(node2);
node1->neighbors.push_back(node3);
node2->neighbors.push_back(node4);
node3->neighbors.push_back(node4);
node4->neighbors.push_back(node5);
// 在图形中进行广度优先搜索
BFS(node1, 5);
return 0;
}
```
这段代码首先定义了一个节点结构 `Node`,其中包含一个值和一个邻居节点的向量。然后,定义了一个 `BFS` 函数来执行广度优先搜索。在 `BFS` 函数中,使用队列来存储待访问的节点,并使用一个 `visited` 向量来记录已访问过的节点。然后,从起始节点开始,逐层遍历图形中的节点,直到找到目标节点或遍历完整个图形。
在 `main` 函数中,创建了一些节点,并构建了它们之间的关系。然后,调用 `BFS` 函数来执行广度优先搜索,并传入起始节点和目标值。
阅读全文