图的储存方式,链式前向星最简单实现方式 (边集数组)

时间:2022-07-28
本文章向大家介绍图的储存方式,链式前向星最简单实现方式 (边集数组),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

对于图来说,储存方式无非就是邻接矩阵、邻接表,今天看了看链式前向星的储存方式,说来说去不还是链表,是一种链表的简单的实现方式,还是比较好理解的。看他们写个结构体,个人不喜欢,没必要,也嫌麻烦,换一种更常见的方法。

#define maxn 10010 
//定义顶点个数,个人不太习惯用const int ,因为const int 会开空间,占空间是一个原因,第二是因为C++ MinGW 的原因容易在使用中出问题,被坑不止一次,可能是非洲人

int tot=0;//图储存空间的假指针
int head[maxn];//表头,用于存图的的左端点
int next[maxn*100];//链式前向星的精髓,对于一个左端点他的右端点,用链式存储,一会有图解。
int ege[maxn*100];//储存边权
int ver[maxn*100];//储存右端点

void add(int x,int y,int e) //建图,在图中添边
{
    ver[tot++]=y;
    next[tot]=head[x];
    ege[tot]=z;
    head[x]=tot;

    //如果是无向图可以在这里反向添边,也可以在使用时,反向使用一边,例如最短路松弛操作
}

for(int i=head[x];i;i=next[i]) //遍历以X为左端点的边
{
    int L=x; // 左端点    
    int R=ver[i]; //右端点
    int eg=ege[i]; //权值
}

思想很简单,next放的是一条链的伪指针,指向同为x1右端点的下一个坐标,即数组下标。ege,ver,实在数组下标中把需要的信息存储,一个是右端点另一个是权值,如果数组下标比成地址,next就是指针,指向这个点的信息的指针。

【边集数组】

边集数组是由两个一维数组构成,一个是存储顶点的信息,另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin),终点下标(end)和权(weight)组成。

所以链式前向星,也是一种边集数组。