邻接矩阵用二维数组存储图的边关系,适合顶点少且频繁查询边的场景。1. 使用vector<vector<int>>实现n×n矩阵;2. 无向图需双向设置matrixu和matrixv;3. 添加边时检查顶点合法性;4. 空间复杂度O(n²),适用于稠密图;5. 可扩展为带权图。

在C++中实现图的邻接矩阵,核心是用二维数组存储顶点之间的连接关系。适用于顶点数量不多且需要频繁查询边存在性的场景。
邻接矩阵使用一个二维数组 matrix[n][n] 表示图,其中 n 是顶点数。若顶点 i 到 j 有边,则 matrix[i][j] 为 1(或边权),否则为 0。对于无向图,矩阵是对称的。
常见实现方式是封装在一个类中,包含顶点数、二维数组(可用 vector
以下是一个简单的无向图邻接矩阵实现:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
#include <vector>
using namespace std;
class Graph {
private:
int vertexNum;
vector<vector<int>> adjMatrix;
public:
// 构造函数,初始化矩阵
Graph(int n) : vertexNum(n) {
adjMatrix.resize(n, vector<int>(n, 0));
}
// 添加边
void addEdge(int u, int v) {
if (u >= 0 && u < vertexNum && v >= 0 && v < vertexNum) {
adjMatrix[u][v] = 1;
adjMatrix[v][u] = 1; // 无向图双向设置
}
}
// 删除边
void removeEdge(int u, int v) {
if (u >= 0 && u < vertexNum && v >= 0 && v < vertexNum) {
adjMatrix[u][v] = 0;
adjMatrix[v][u] = 0;
}
}
// 判断是否有边
bool hasEdge(int u, int v) {
if (u >= 0 && u < vertexNum && v >= 0 && v < vertexNum)
return adjMatrix[u][v] == 1;
return false;
}
// 打印矩阵
void printMatrix() {
for (int i = 0; i < vertexNum; ++i) {
for (int j = 0; j < vertexNum; ++j) {
cout << adjMatrix[i][j] << " ";
}
cout << endl;
}
}
};
使用时先创建图对象,再调用方法添加边并操作:
基本上就这些。邻接矩阵实现简单,查边效率高,但占用空间大,根据实际需求选择即可。
以上就是c++++中如何实现图的邻接矩阵_c++图邻接矩阵实现方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号