链式前向星
发布日期:2021-06-29 05:37:42
浏览次数:4
分类:技术文章
本文共 1013 字,大约阅读时间需要 3 分钟。
之前存图用邻接表都是直接使用的vector,但是vector是自动扩容的,在空间不够的时候会自动申请多一倍的空间,这样的话空间浪费比较严重,而且有的题目会卡空间,可能就过不了。如果使用链式前向星,就可以节省不少空间,开一个和边的数目相同的数组就可以了。
链式前向星包括两个部分:head数组,和edge数组。
head[i]表示以i为起点的第一条边的位置。
edge是个结构体数组:
struct Edge{ int to;//表示第i条边的终点 int next;//表示与第i条边同起点的下一条边的存储位置 int w;//权值}edge[M];加边的代码:
void add(int u,int v,int w) { edge[cnt].w = w; edge[cnt].to = v; edge[cnt].next = head[u]; head[u] = cnt++; }遍历以u为起点的所有边:
for(int i=head[u];i!=-1;i=edge[i].next)整体代码:
#include#include #define N 105 //顶点数目 #define M 10005 //边的数目 struct Edge{ int to; int next; int w;}edge[M];int head[N];int main(){ int n, m, u, v, w, cnt; scanf("%d%d", &n, &m); memset(head, -1, sizeof(head)); cnt = 0; for(int i = 0; i < m; i++){ //建图 scanf("%d%d%d", &u, &v, &w); edge[cnt].w = w; edge[cnt].to = v; edge[cnt].next = head[u]; head[u] = cnt++; } for(int i = 0; i < n; i++){ //遍历以i为头的所有边 for(int j = head[i]; j != -1; j = edge[j].next) printf("%d ", j); printf("\n"); } return 0;}
转载地址:https://blog.csdn.net/zhj_fly/article/details/75270737 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月13日 10时59分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
xttdriver.pl
2021-07-02
Pyhanlp自然语言处理中的新词识别
2021-07-02
第二十一章:变换(六)
2021-07-02
[New Feature]OSS支持设置Bucket 服务端默认加密方式
2021-07-02
如何使用python分析CPU使用情况? 大概是这样吧
2021-07-02
你如何制定一份可实施的2019年大数据学习计划? ...
2021-07-02
阿里云RPA(机器人流程自动化)干货系列之六:客户端安装及激活 ...
2021-07-02
[设计] 地铁站点主题色的配色
2021-07-02
Android——实现m3u8视频缓存
2021-07-02
Android——各种动画Drawable
2021-07-02
Android——仿美团商品详情页折叠效果
2021-07-02
Android——ListView中getChildAt(index)的使用注意事项
2021-07-02
Gradle for Android(一)——初识Gradle
2021-07-02
Gradle for Android(六)——测试
2021-07-02
Gradle for Android(三)——依赖管理(一)
2021-07-02
Gradle for Android(四)——依赖冲突解决
2021-07-02
Gradle for Android(三)——依赖管理(二)
2021-07-02
Gradle for Android(五)——构建变体
2021-07-02