图的邻接矩阵存储及基本操作代码实现
时间: 2023-09-05 10:15:11 浏览: 86
图的邻接矩阵存储代码
3星 · 编辑精心推荐
以下是一个基于C++的邻接矩阵存储图及其基本操作的代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
class Graph {
private:
int n; // 图中顶点数
vector<vector<int>> adj; // 邻接矩阵
public:
// 构造函数
Graph(int n) {
this->n = n;
adj.resize(n, vector<int>(n, 0));
}
// 添加边
void addEdge(int u, int v, int w) {
adj[u][v] = w;
adj[v][u] = w; // 对于无向图,需添加两次
}
// 删除边
void removeEdge(int u, int v) {
adj[u][v] = 0;
adj[v][u] = 0; // 对于无向图,需删除两次
}
// 遍历邻接矩阵
void traverse() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << adj[i][j] << " ";
}
cout << endl;
}
}
// 查询边
int getWeight(int u, int v) {
return adj[u][v];
}
// 求度
int getDegree(int u) {
int degree = 0;
for (int i = 0; i < n; i++) {
if (adj[u][i] != 0) {
degree++;
}
}
return degree;
}
};
int main() {
Graph g(5);
g.addEdge(0, 1, 2);
g.addEdge(0, 2, 1);
g.addEdge(1, 2, 3);
g.addEdge(2, 3, 2);
g.addEdge(2, 4, 4);
g.traverse();
cout << "Weight of edge (0, 1): " << g.getWeight(0, 1) << endl;
cout << "Degree of vertex 2: " << g.getDegree(2) << endl;
g.removeEdge(2, 4);
g.traverse();
return 0;
}
```
上述代码中,我们使用了一个二维vector来表示邻接矩阵。其中,构造函数中首先初始化了邻接矩阵,将其全部元素置为0。接着,我们实现了添加边和删除边的操作,这里我们假设给定的图是无向图,因此在添加和删除边时,需要对邻接矩阵中对应位置的元素修改两次。然后,我们实现了遍历邻接矩阵、查询边和求度的操作,这些操作都是基于邻接矩阵进行实现的。最后,我们在main函数中创建一个图对象,并对其进行了一些操作,包括添加边、遍历邻接矩阵、查询边、求度和删除边。
阅读全文