无向图边双缩点C++代码
时间: 2024-10-26 09:01:16 浏览: 22
在C++中,无向图通常通过邻接表(Adjacency List)数据结构表示,其中每个顶点关联一个边集合。边的双缩点表示法(即两个顶点都包含对方作为邻居),可以这样实现:
```cpp
#include <vector>
#include <unordered_set>
// 定义顶点(节点)
class Vertex {
public:
int id;
std::unordered_set<int> neighbors; // 存储邻居顶点ID
Vertex(int id) : id(id) {}
};
// 定义无向图
class Graph {
private:
std::vector<Vertex*> vertices; // 保存所有顶点
public:
void addEdge(int fromId, int toId) {
vertices[fromId]->neighbors.insert(toId);
vertices[toId]->neighbors.insert(fromId); // 双缩点表示法
}
// 其他方法如添加顶点、删除边等...
};
int main() {
Graph g;
g.addEdge(0, 1);
g.addEdge(1, 2);
// 现在你可以访问和操作这个图的边
for (auto& vertex : g.vertices) {
if (!vertex->neighbors.empty()) {
std::cout << "Vertex " << vertex->id << " has neighbors: ";
for (const auto& neighbor : vertex->neighbors)
std::cout << neighbor << " ";
std::cout << std::endl;
}
}
return 0;
}
```
在这个例子中,`addEdge`函数会同时将两条边加入到两个顶点的邻接集合里,实现了边的双缩点表示。
阅读全文