数据结构实验图使用邻接表存储图片
时间: 2024-05-20 09:19:28 浏览: 90
数据结构 图的邻接表存储
邻接表是一种常见的图存储方式,可以用于实现图的基本操作。下面是使用邻接表存储的一个无向图的示例:
![邻接表存储图示例](https://img-blog.csdnimg.cn/20210306201453559.png)
在邻接表中,每个顶点都对应一个链表,链表中存储与该顶点相邻的所有顶点。对于无向图来说,由于每条边都可以看做是两个端点之间的连接,因此每条边都需要在两个对应的链表中存储。
下面是使用C++代码实现上述图的邻接表存储:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 邻接表存储图的节点结构体
struct Node {
int val; // 节点的值
vector<int> edges; // 与该节点相邻的所有节点的索引
};
// 邻接表存储图的结构体
struct Graph {
vector<Node> nodes; // 所有节点的数组
// 添加一条边
void addEdge(int u, int v) {
nodes[u].edges.push_back(v);
nodes[v].edges.push_back(u);
}
};
int main() {
Graph g;
g.nodes.resize(6); // 初始化6个节点
// 添加边
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(2, 4);
g.addEdge(3, 4);
g.addEdge(3, 5);
g.addEdge(4, 5);
// 输出邻接表
for (int i = 0; i < g.nodes.size(); i++) {
cout << i << ": ";
for (int j = 0; j < g.nodes[i].edges.size(); j++) {
cout << g.nodes[i].edges[j] << " ";
}
cout << endl;
}
return 0;
}
```
运行上述代码,输出结果为:
```
0: 1 2
1: 0 2 3
2: 0 1 4
3: 1 4 5
4: 2 3 5
5: 3 4
```
可以看到,每个节点的链表中存储了与该节点相邻的节点的索引,从而实现了图的存储。
阅读全文