数据结构C++中的图模版
时间: 2024-09-13 14:02:17 浏览: 32
在C++中,图是一种数据结构,用于表示对象之间的一种复杂关系。图由顶点(节点)和边组成,边可以是有向的(从一个顶点指向另一个顶点)或无向的(连接两个顶点但不区分方向)。图可以使用邻接矩阵或邻接表等方式来实现。
下面是一个简单的C++图模版的实现,使用邻接表表示:
```cpp
#include <iostream>
#include <list>
#include <vector>
template <typename T>
class Graph {
private:
int V; // 顶点的数量
std::list<int> *adj; // 邻接表
public:
Graph(int V); // 构造函数
void addEdge(int v, int w); // 添加边
void printGraph(); // 打印图
};
template <typename T>
Graph<T>::Graph(int V) {
this->V = V;
adj = new std::list<int>[V];
}
template <typename T>
void Graph<T>::addEdge(int v, int w) {
adj[v].push_back(w); // 将 w 添加到 v 的链表中
}
template <typename T>
void Graph<T>::printGraph() {
for (int v = 0; v < V; ++v) {
std::cout << "顶点 " << v << ":";
for (auto i = adj[v].begin(); i != adj[v].end(); ++i)
std::cout << " -> " << *i;
std::cout << std::endl;
}
}
int main() {
Graph<int> g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
g.printGraph();
return 0;
}
```
在这个模版中,我们定义了一个`Graph`类,它包含了一个顶点数组`adj`,用于存储每一对顶点之间的边。构造函数`Graph(int V)`初始化顶点数,并创建邻接表。`addEdge(int v, int w)`方法用于添加边,而`printGraph()`方法用于打印图的邻接表表示。
阅读全文