在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、编译器优化等领域。对于初学者来说,理解图的基本表示方式是迈向高级算法的第一步。本文将带你用 C++ 实现一种最基础、最直观的图结构——静态图结构,具体采用 邻接矩阵(Adjacency Matrix) 的方式。

静态图结构是指图的顶点数量和边的关系在程序运行前就已经确定,不会动态增删节点或边。这种结构非常适合使用数组(尤其是二维数组)来存储,也就是我们常说的 邻接矩阵。
邻接矩阵是一个 n × n 的二维数组(n 是顶点数),其中 matrix[i][j] 表示从顶点 i 到顶点 j 是否存在边。如果是无权图,通常用 1 表示有边,0 表示无边;如果是带权图,则直接存储权重值。
当然,邻接矩阵也有缺点:空间复杂度为 O(n²),当图很稀疏(边很少)时会浪费大量内存。但对于学习 C++静态图结构 来说,它是最佳起点。
下面我们用 C++ 编写一个完整的静态图类,支持无向无权图的构建与基本操作。
#include <iostream>#include <vector>using namespace std;class StaticGraph {private: int vertexCount; // 顶点数量 vector<vector<bool>> adjMatrix; // 邻接矩阵,使用 bool 节省空间public: // 构造函数:初始化图 StaticGraph(int n) : vertexCount(n) { // 初始化 n x n 的邻接矩阵,全部设为 false(无边) adjMatrix = vector<vector<bool>>(n, vector<bool>(n, false)); } // 添加无向边 void addEdge(int u, int v) { if (u < 0 || u >= vertexCount || v < 0 || v >= vertexCount) { cout << "错误:顶点编号超出范围!" << endl; return; } adjMatrix[u][v] = true; adjMatrix[v][u] = true; // 无向图,对称 } // 判断是否存在边 bool hasEdge(int u, int v) { if (u < 0 || u >= vertexCount || v < 0 || v >= vertexCount) return false; return adjMatrix[u][v]; } // 打印邻接矩阵 void printGraph() { cout << "邻接矩阵表示:\n"; for (int i = 0; i < vertexCount; ++i) { for (int j = 0; j < vertexCount; ++j) { cout << adjMatrix[i][j] << " "; } cout << endl; } }};// 主函数测试int main() { int n = 4; // 4 个顶点:0, 1, 2, 3 StaticGraph graph(n); // 添加边:0-1, 0-2, 1-3 graph.addEdge(0, 1); graph.addEdge(0, 2); graph.addEdge(1, 3); // 打印图 graph.printGraph(); // 查询边 cout << "\n顶点 0 和 1 之间是否有边?" << (graph.hasEdge(0, 1) ? "有" : "无") << endl; return 0;}上面的代码展示了如何用 C++ 实现一个简单的 静态图结构:
vector<vector<bool>> 代替原始二维数组,更安全且自动管理内存n,并初始化一个 n×n 的全 false 矩阵addEdge 方法添加无向边(双向设置为 true)hasEdge 快速判断两点是否相连printGraph 用于可视化邻接矩阵运行结果将输出如下邻接矩阵(1 表示有边):
0 1 1 0 1 0 0 1 1 0 0 0 0 1 0 0
如果你需要实现 带权图,只需将 vector<vector<bool>> 改为 vector<vector<int>> 或 vector<vector<double>>,并用一个特殊值(如 -1 或 INT_MAX)表示“无边”即可。这也是 C++图数据结构 中常见的变体。
通过本文,你已经掌握了如何用 C++ 实现基于邻接矩阵的 静态图结构。这种实现方式简单、高效,特别适合顶点数量固定的小型图。无论你是准备面试,还是学习图论算法(如 DFS、BFS、Dijkstra),这都是坚实的基础。
记住我们的四个核心 SEO关键词:
动手试试吧!修改代码,尝试添加更多功能,比如计算每个顶点的度、判断图是否连通等。编程的乐趣,就在实践中!
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124206.html