实验一:依据邻接矩阵的广度优先搜索算法,实现以邻接表为存储结构的广度优先搜索算法。用c++写出代码
时间: 2024-12-12 07:25:44 浏览: 22
实验一:为了实现基于邻接表的广度优先搜索(BFS)算法,首先需要创建一个图的数据结构,并以邻接表的方式存储节点及其连接。这里是一个简单的C++代码示例:
```cpp
#include <iostream>
#include <vector>
#include <queue>
// 图的节点结构体
struct Node {
int id;
std::vector<int> neighbors; // 邻居列表
};
// 图的表示
class Graph {
private:
std::vector<Node*> nodes;
public:
void addNode(int id) {
nodes.push_back(new Node{id});
}
void addEdge(int src, int dest) {
nodes[src - 1]->neighbors.push_back(dest);
}
void bfs(int start) {
std::queue<int> queue;
bool visited[nodes.size()]; // 记录节点是否已访问
for (int i = 0; i < nodes.size(); i++) {
visited[i] = false;
}
queue.push(start + 1); // 标准化起始节点索引
while (!queue.empty()) {
int current = queue.front();
queue.pop();
visited[current - 1] = true;
std::cout << "Visiting node " << current << std::endl;
// 输出当前节点和它的邻居
for (auto neighbor : nodes[current - 1].neighbors) {
if (!visited[neighbor - 1]) {
queue.push(neighbor);
}
}
}
}
};
int main() {
Graph g;
// 添加节点和边
g.addNode(1); g.addNode(2); g.addNode(3);
g.addEdge(1, 2);
g.addEdge(1, 3);
// 开始BFS
g.bfs(1);
return 0;
}
```
这个程序首先定义了一个`Node`结构体来存储每个节点及其邻居,然后创建了一个`Graph`类用于管理节点和边。`bfs`函数使用了`std::queue`来进行广度优先遍历,同时记录每个节点是否已经访问过。
阅读全文