当前位置:首页 > 其他 > 手搓邻接矩阵类代码注释与实现指南:从零开始理解图论数据结构(适合小白)

手搓邻接矩阵类代码注释与实现指南:从零开始理解图论数据结构(适合小白)

4天前

一、简介和特点

邻接矩阵是用于表示(Graph)的一种数据结构,通常用二维数组存储节点之间的关系。本文的graph类通过C++实现了一个基础的邻接矩阵结构,特点如下:

1. 动态创建:根据用户输入的节点数量(sum)动态分配内存,避免固定大小的限制。

2. 边权值存储:矩阵元素可存储边的权重(如距离、成本等),支持带权图。

3. 简洁接口:提供添加节点(边)、打印矩阵的公有方法,方便调用。

二、优点

1. 易理解性:相比链表实现的邻接表,矩阵结构更直观,适合新手入门图论

2. 快速查询:通过索引直接访问节点关系(node[i][j]),时间复杂度为O(1)。

3. 灵活扩展:通过构造函数参数可动态调整图规模,适应不同问题需求。

三、实现步骤

1. 定义类结构:声明sum(节点总数)和node(指向二维数组的指针)。

2. 构造函数初始化:

接收节点数newsum,赋值给sum。

动态分配sum行指针数组:node = new int*[sum]。

为每行分配sum列的数组空间,并初始化所有元素为0。

3. 添加边方法addnode:

接收参数:行索引line、列索引row、边权值val。

将val赋值到对应矩阵位置:node[line][row] = val。

4. 打印方法print:

双层循环遍历矩阵,输出每个元素后换行,展示完整邻接矩阵。

四、代码与注释

#include <iostream>
using namespace std;

// 定义邻接矩阵类
class graph {
private:  
    // 节点总数(矩阵行列数)
    int sum = 0;
    // 指向二维数组的指针
    int** node;
public:
    // 构造函数:初始化矩阵大小并赋初值
    graph(int newsum) {
        sum = newsum;  // 设置节点数量
        node = new int* [sum];  // 动态分配行指针数组
        for (int i = 0; i < sum; i++) {  // 遍历每行
            node[i] = new int[sum];  // 为每行分配列数组
            for (int j = 0; j < sum; j++) {  // 初始化元素为0
                node[i][j] = 0;
            }
        }
    }
    // 添加边方法(设置节点i到j的权值)
    void addnode(int line, int row, int val) {
        node[line][row] = val;  // 将val写入指定位置
    }
    // 打印矩阵方法
    void print() {
        for (int i = 0; i < sum; i++) {  // 遍历行
            for (int j = 0; j < sum; j++) {
                cout << node[i][j] << " ";  // 输出元素
            }
            cout << endl;  // 换行
        }
    }
};

五、总结

通过手搓邻接矩阵类,新手可以深入理解:

1. 图论数据结构的底层实现逻辑;

2. C++动态内存管理(new/delete)的应用;

3. 二维数组在算法中的灵活使用。

原创内容 转载请注明出处

分享给朋友:

相关文章

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

快速排序算法详解 C++代码实现

一、简介和特点快速排序(QuickSort)是一种经典的高效排序算法,采用分治思想:通过选定一个枢轴元素(pivot),将数组划分为左右两部分,使左侧元素均小于枢轴,右侧元素均大于枢轴,再递归对子数组...

手把手教你实现头插法树:从代码到原理的深度解析

一、简介和特点头插法树是一种基于链表实现的树形数据结构,其核心思想是通过链表头插法管理节点的孩子节点。在本文的代码示例中,我们使用C++模板类实现了树结构,每个树节点(treenode<T>...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。