一个aov网用邻接矩阵表示_从零开始学习数据结构>图之邻接矩阵

学习完“树”的数据结构,接下来就是“图”了,越复杂的数据结构,其实用性往往是最强的,图是需要掌握的。 1、图 (1).图是一种非线性结构;主要由顶点和边构成; (2).<> 代表有向图,( )代表无向图; (3).无向图有N个顶点时,最多有N*(N-1)/2条边;有向图最多有N*(N-1)条边; (4).权:边上具有相关的数,带权图叫做网络; (5).邻接顶点: 与其接触边上的顶点; (6).度:与顶点V关联的边数;有向图中度 = 出度 + 入度; (7).简单路径:路径上各顶点互不重复; (8).回路/环:路径上第一个顶点与最后一个顶点重合; (9).连通图/强连通图:各顶点之间有边联系,有向图,双路径存在叫做强连通图; (10).生成树:是无向连通图的极小连通子图,若有N个顶点,则生成树由N-1条边构成! 2、图的邻接矩阵 邻接矩阵模型 b243888c15d8142e8e9d0a82ac9e26b7.png 就是将图的多对多的非线性结构用矩阵的方式表示; 我们必须知道: (1).会由矩阵来恢复图; (2).第一个邻接顶点:从列开始处,第一个边 (3).下一个邻接顶点:给2个参数,第一个参数表示是谁的下一个邻接顶点,第二个表示从当前顶点开始其后的第一条边; (4). 其顶点存放在数组空间中; (5). 顶点之间的关系通过矩阵来表示边。 存储结构:
1int maxVertices;  //最大顶点数
2int curVertices;  //当前顶点数
3int curEdges;  //当前边数
4                                //用的是C++的继承
5Type *vertexList;  //存放顶点的数组
6int **edge;  //存放顶点关系的矩阵用边表示
存储模型如下: 668848f2b940e00b1c24db830687cb47.png 3、图的实现方法 均用C++实现;并且父类给了接口,子类继承实现即可;方便对不同的存储结构的编写。 核心方法,删除顶点: (1)、第一种方法实现
 1bool removeVertex(const Type &v){
    
2    int i = getVertexIndex(v);
3    if(i == -1){
4        return false;
5    }
6    for(int k = i; k -1; ++k){
7        vertexList[k] = vertexList[k+1];
8    }
9
10    int edgeCount = 0;
11    for(int j = 0; j 12        if(edge[i][j] != 0)
13            edgeCount++;
14    }
15    //删除行
16    for(int k = i; k -1; ++k)
17    {
18        for(int j = 0; j 19        {
20            edge[k][j] = edge[k+1][j];
21        }
22    }
23    //删除列
24    for(int k = i; k -1; ++k)
25    {
26        for(int j = 0; j 27        {
28            edge[j][k] = edge[j][k+1];
29        }
30    }
31
32    curVertices--;
33    curEdges -= edgeCount;
34
35    return true;
36}
以上存在数组的大量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值