链式前向星:既然是链式那么肯定和链表相关,前向星是每次指向都向前

链式前向星存图是以边为中心,并不是以结点为中心,它记录的是边的一些属性,包括边边的id、头节点、尾结点、权值、边的指向!

边的指向是遍历图的时候需要按照一定顺序去遍历,而不能胡乱的去遍历,那么就需要这些边存在一定规律,所以用到"边的指向",这个指向是相同头节点出发,依次指向相同头节点的边,下图为例。

通过这幅图我们可以看到v1、v2、v3、v4都是由结点u出发,引出的边1、边2、边3、边4,可以看到橙色的指向箭头,边4指向边3、边3指向边2、边2指向边1、边1指向null。

如何通过代码实现呢?

我们可以看到一个结构体struct可以存 头节点u、尾结点v、权值w、指向next,但是我们如何通过结点u拿到最后一个条边呢?(因为遍历的时候一定要以边为中心进行遍历,所以肯定要找出一条边作为头,依次去遍历), 在这里我们用一个head数组存放以u为头节点,最后一条边的编号id,这样就可以通过head数组head[u]找到最后一条边的编号,通过边的next指向,依次去遍历,直到next==null, 一个u结点是这样遍历出所有以u为头节点的边的,那么我们遍历所有的结点,不就可以遍历出所有的边了嘛!

常用代码模板

#include <bits/stdc++.h>
#define ll long longusing namespace std;const int maxn=1e6+10;
int n,ecnt;//ecnt统计一共有多少条边int head[maxn];//存放以u为头节点的最后一条边的编号
struct edge
{int u,v,next; //结构体表示边
} E[maxn];void add(int u,int v)
{E[++ecnt].u=u; //从1开始为边进行编号E[ecnt].v=v;E[ecnt].next=head[u];//因为head[u]每次存放最后一条边的编号,所以新建的边要指向head[u]head[u]=ecnt;//更新head[u],当前边为最新需要下一条边指向的边
}int main()
{cin>>n;int u,v;for(int i=1; i<=n-1; i++){scanf("%d%d",&u,&v);add(u,v);//add(v,u); 双向边则添加两条}for(int i=1; i<=n; i++){if(head[i]!=0){   //取到最后一条边进行遍历  for(int edge=head[i]; edge!=0; edge=E[edge].next){cout<<E[edge].u<<"-----"<<E[edge].v<<endl;}}}return 0;
}


以这样一副树进行遍历

打印结果

我们也可以利用深搜dfs来进行遍历 大概模版如下

void dfs(int u)
{for(int i=head[u]; i; i=E[i].next){int v=E[i].v;if(!vis[v]){vis[v]=1;dfs(v);//深搜dfs遍历}}
}

感谢观看,多多点赞支持

链式前向星存图(有图详解)相关推荐

  1. 迪杰斯特拉最全详解(朴素版,堆优化+邻接表存图/链式前向星存图)

    迪杰斯特拉 迪杰斯特拉算法分析 迪杰斯特拉(朴素版) 迪杰斯特拉堆优化(邻接表存图) 迪杰斯特拉堆优化(链式前向星存图) 最短路--spfa(链式前向星存图) 迪杰斯特拉算法分析 一般用三种数据结构存 ...

  2. P1155 双栈排序(二分图的染色判断+链式前向星)

    P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...

  3. 2019 CCF CSP-J2 第4题:加工零件 ← 链式前向星

    [问题描述] https://www.luogu.com.cn/problem/P5663 [算法分析] 若结点u到结点v间存在长度为L的路径,那么也一定存在长度为L+2.L+4.L+6.--的路径. ...

  4. JavaC++题解与拓展——leetcode310.最小高度树【复习链式前向星】

    每日一题做题记录,参考官方和三叶的题解 目录 题目要求 思路一:动态规划 Java 链式前向星 C++ 思路二:拓扑排序+BFS Java C++ 总结 题目要求 思路一:动态规划 遍历整个图,当前遍 ...

  5. 洛谷 P2349:金字塔 ← 链式前向星 dfs

    [题目来源] https://www.luogu.com.cn/problem/P2349 [题目描述] 有一盗墓者潜入一金字塔盗宝.当她(难道是 Lara Croft ?)打开一个宝箱的时候,突然冒 ...

  6. 多校第七场A---Age of Moyu 链式前向星+Dijkstra

    这里借这个题讲一下什么是链式前向星和他的用处: 一.链式前向星 1.由来:我们都知道图的存储方式有链接矩阵,邻接表两种,邻接矩阵好写但是占内存大,数稍微大点的题目就开不下数组了(适合稠密图):邻接表的 ...

  7. 链式前向星(详细讲述)

    在dalao的压迫下本蒟蒻发个博客,给大家讲一下链式前向星(新手,写错了轻喷) 首先说明一点链式前向星适合于稀疏图,而邻接矩阵则更适合稠密图,所以最好看好数据范围再决策使用哪个方法,当然有些题会刚好卡 ...

  8. U81206:链式前向星模板题

    [题目来源] https://www.luogu.com.cn/problem/U81206 [题目描述] 链式前向星模板题. 读入n个点,m条边,以及flag.若flag==1,则图有向,否则无向. ...

  9. P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐

    题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...

最新文章

  1. 计算机图形学多边形填充代码_零基础学计算机图形学太难?或许你缺的只是一本好书...
  2. LintCode刷起来(一)
  3. Spring Boot 核心知识点总结,值得收藏!
  4. javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)
  5. 测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...
  6. 《天天数学》连载10:一月十日
  7. 魅族17 Pro通过3C认证:魅族史上最强快充
  8. 95-136-042-源码-Operator-AbstractUdfStreamOperator
  9. Django 报错 ‘polls‘ is not a registered namespace
  10. KNN分类python实现
  11. bool类型头文件_C++ Primer Chapter2 变量和基本类型
  12. asmx迷10分钟升级成wcf熟手指南
  13. 电脑同时上内外网——设置教程(附内外网优先级设置)
  14. 数字证书国产化的趋势
  15. 软件架构设计–五视图法
  16. 想转行学IT,到底要不要去培训机构?
  17. Echarts地图深入+散点
  18. 【2018亚太数据中心峰会】林峰:中国游戏打破传统模式立足国际舞台
  19. 60帧究级豪华观影体验!potplayer通过bluesky补帧!
  20. 2021年中国农作物播种面积、农作物成灾面积及造成直接经济损失情况分析[图]

热门文章

  1. OMRON欧姆龙 CP1H 使用以太网模块CP1W-CIF41,配置方法和异常排查
  2. geohash地图好帮手
  3. UltraEdit 10.20c 下载及注册
  4. 网站扫描二维码强制关注公众号登录
  5. 论文计算机的教学方法,职业院校计算机教育教学方法初探论文
  6. 世界杯押注还得看技术流,这个预测AI把赔率也算上了
  7. 宏基因组注释和可视化神器MEGAN入门
  8. Spring boot 使用mina
  9. 怎么样让指针指向尾结点C语言,带头结点头指针与带头结点尾指针的学习
  10. ChatGPT为什么不能代替人