在 C++ 中实现图的存储时,常用的方法包括 邻接矩阵(Adjacency Matrix)、邻接表(Adjacency List) 和 边列表(Edge List)。以下是具体实现方法、优缺点分析及代码示例:
1. 邻接矩阵(Adjacency Matrix)
原理
- 使用二维数组
matrix[u][v]
表示顶点u
和v
的连接关系。 - 适用于 稠密图(边数接近顶点数的平方)。
- 无权图:
matrix[u][v] = 1
表示存在边;0
表示无连接。 - 带权图:
matrix[u][v] = weight
表示边的权重。
图解
C++ 实现
#include <vector>
using namespace std;
// 定义图的顶点数
const int V = 100;
// 无权图的邻接矩阵
vector<vector<int>> adjMatrix(V, vector<int>(V, 0));
// 添加无向边
void addUndirectedEdge(int u, int v) {
adjMatrix[u][v] = 1;
adjMatrix[v][u] = 1;
}
// 添加带权有向边
void addDirectedWeightedEdge(int u, int v, int weight) {
adjMatrix[u][v] = weight