用c++写一个图的邻接矩阵和邻接表存储
时间: 2024-05-01 07:23:58 浏览: 114
以下是C++代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义图类
class Graph {
private:
int V; // 图的顶点数量
vector<vector<int>> adjMatrix; // 邻接矩阵存储
vector<vector<int>> adjList; // 邻接表存储
public:
// 构造函数
Graph(int V) {
this->V = V;
// 初始化邻接矩阵,元素值为0表示两个顶点不相邻
adjMatrix.resize(V, vector<int>(V, 0));
// 初始化邻接表,每个顶点对应一个vector存储与之相邻的顶点
adjList.resize(V);
}
// 添加一条边
void addEdge(int u, int v) {
// 邻接矩阵中两个顶点相邻就把元素值设为1
adjMatrix[u][v] = 1;
adjMatrix[v][u] = 1;
// 邻接表中将v添加到u的vector中,将u添加到v的vector中
adjList[u].push_back(v);
adjList[v].push_back(u);
}
// 打印邻接矩阵
void printAdjMatrix() {
cout << "邻接矩阵:" << endl;
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
cout << adjMatrix[i][j] << " ";
}
cout << endl;
}
}
// 打印邻接表
void printAdjList() {
cout << "邻接表:" << endl;
for (int i = 0; i < V; i++) {
cout << i << ": ";
for (int j = 0; j < adjList[i].size(); j++) {
cout << adjList[i][j] << " ";
}
cout << endl;
}
}
};
int main() {
Graph g(5); // 创建一个具有5个顶点的图
// 添加边
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(3, 4);
// 打印邻接矩阵和邻接表
g.printAdjMatrix();
g.printAdjList();
return 0;
}
```
输出结果:
```
邻接矩阵:
0 1 0 0 1
1 0 1 1 1
0 1 0 1 0
0 1 1 0 1
1 1 0 1 0
邻接表:
0: 1 4
1: 0 2 3 4
2: 1 3
3: 1 2 4
4: 0 1 3
```
阅读全文