前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图的储存方式,链式前向星最简单实现方式 (边集数组)

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

作者头像
风骨散人Chiam
发布2020-10-28 09:33:03
9510
发布2020-10-28 09:33:03
举报
文章被收录于专栏:CSDN旧文

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

代码语言:javascript
复制
#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)组成。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档