链式前向星是一种常见的储存图的方式(是前向星存图法的优化版本),支持增边和查询,但不支持删边(如果想要删除指定的边建议用邻接矩阵)。

  • 储存方式

  首先定义数组 head[ i ] 来储存从节点 i 出发的第一条边的下标,定义结构体 edge[ i ] 中包含三个元素 nxt, to, val, 分别储存从节点 i 出发的下一条边的下标(nxt),该边的终点(to), 该边的边权(val)。

 struct EDGE {
int nxt, to, val; /* 下一条边的下标, 这条边的终点, 边权 */
};
EDGE edge[maxn]; int head[maxn]; /* head[ i ]储存从节点 i 出发的第一条边的下标 */
  • 添加节点

  定义变量 cnt 表示当前边的编号(初始值为0),具体如代码所示。

 int cnt = ;

 void add ( int st, int ed, int v ) {
edge[ ++cnt ].nxt = head[st];
edge[cnt].to = ed;
edge[cnt].val = v;
head[st] = cnt; /*
edge[ ++cnt ].nxt = head[ed]; * 如果是无向图就加上这个语句
edge[cnt].to = st;
edge[cnt].val = v;
head[ed] = cnt; */ }
  • 节点的遍历

  从数据结构就可以看出来,上代码。

 /* i 是作为原点的节点编号 */
for ( int j = head[i]; j != ; j = edge[j].nxt ) /* <-- 链式前向星遍历的关键 */
printf ( "-->%d || val = %d \n", edge[j].to, edge[j].val );
}
  • 汇总代码
 #include <cstdio>
#include <cstring> using namespace std; const int maxn = ; struct EDGE {
int nxt, to, val; /* 下一条边的下标, 这条边的终点, 边权 */
};
EDGE edge[maxn]; int head[maxn], cnt = ; /* head[ i ]储存从节点 i 出发的第一条边的下标 */ void add ( int st, int ed, int v ) {
edge[ ++cnt ].nxt = head[st];
edge[cnt].to = ed;
edge[cnt].val = v;
head[st] = cnt; /*
edge[ ++cnt ].nxt = head[ed]; * 如果是无向图就加上这个语句
edge[cnt].to = st;
edge[cnt].val = v;
head[ed] = cnt; */ } int main () {
memset ( head, , sizeof head );
int n, m;
scanf ( "%d%d", &m, &n ); /* 共有 m 个节点, n 条边 */
for ( int i = ; i <= n; i ++ ){
int a, b, c;
scanf ( "%d%d%d", &a, &b, &c );
add ( a, b, c );
}
for ( int i = ; i <= m; i ++ ){
printf ( "开始以节点%d为原点\n", i );
for ( int j = head[i]; j != ; j = edge[j].nxt ) /* <-- 链式前向星遍历的关键 */
printf ( "-->%d || val = %d \n", edge[j].to, edge[j].val );
}
return ;
}

【C++学习笔记】 链式前向星的更多相关文章

  1. poj-1459-最大流dinic+链式前向星-isap+bfs+stack

    title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...

  2. 链式前向星+SPFA

    今天听说vector不开o2是数组时间复杂度常数的1.5倍,瞬间吓傻.然后就问好的图表达方式,然后看到了链式前向星.于是就写了一段链式前向星+SPFA的,和普通的vector+SPFA的对拍了下,速度 ...

  3. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板

    一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...

  4. hdu2647 逆拓扑,链式前向星。

    pid=2647">原文地址 题目分析 题意 老板发工资,可是要保证发的工资数满足每一个人的期望,比方A期望工资大于B,仅仅需比B多1元钱就可以.老板发的最低工资为888元.输出老板最 ...

  5. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

  6. 【模板】链式前向星+spfa

    洛谷传送门--分糖果 博客--链式前向星 团队中一道题,数据很大,只能用链式前向星存储,spfa求单源最短路. 可做模板. #include <cstdio> #include <q ...

  7. zzuli 2131 Can Win dinic+链式前向星(难点:抽象出网络模型+建边)

    2131: Can Win Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 431  Solved: 50 SubmitStatusWeb Board ...

  8. HDU1532 Drainage Ditches SAP+链式前向星

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. zzuli 2130: hipercijevi 链式前向星+BFS+输入输出外挂

    2130: hipercijevi Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 595  Solved: 112 SubmitStatusWeb B ...

随机推荐

  1. 让最新的 Android Q Beta 3 强制重启的 Project Mainline,到底是什么?

    一. 序 最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能. 近期不少体验用户反 ...

  2. 【图解】我使用过的 Dubbo 和 Spring Cloud

    自从2015年毕业开始从事 Java 开发工作,已经过去3年多了, 在各种不知名的小公司待过,经历过生产力从低到高,技术从落后到先进的过程, Dubbo 和 Spring Cloud 就是我曾经所经历 ...

  3. rabbit的简单搭建,java使用rabbitmq queue的简单例子和一些坑

    一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 以整 ...

  4. 【转】c# winform 创建文件,把值写入文件,读取文件里的值,修改文件的值,对文件的创建,写入,修改

    创建文件和读取文件的值 #region 判断文件是否存在,不存在则创建,否则读取值显示到窗体 public FormMain() { InitializeComponent(); //ReadFile ...

  5. 寻找jar包的方法

    在项目开发中经常会遇到资源jar查找难的问题,一种使用maven ,另一种方法是: (1).使用下载地址:https://oss.sonatype.org/content/repositories/r ...

  6. 使用.NET配置文件appSettings元素的File属性

    今天又一次郁闷了,看Orchard真实学到不少东西哇! Web.Config里面appSettings节点原来可以直接引用一个文件,以前还老想着微软真二,配置节点多了肿么办? 本质上来说,每一个可执行 ...

  7. 如何下载最新的固件到Pixhawk

    连接Pixhawk至电脑 当Mission Planner 已经安装至你的电脑上,使用micro USB数据线连接pixhawk到您的计算机上. 使用一个USB端口直接在您的计算机上,不要用USB集线 ...

  8. js数字滑动时钟

    js数字滑动时钟: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. intelij idea相关笔记--持续更新

    一.快捷键: Ctrl+F 文件内查找 Ctrl+Shift+F 全局查找 Ctrl+Shift+N 查找文件 Ctrl+Alt+← 返回上一步 Ctrl+Alt+→ 返回下一步 二.编译相关: 如果 ...

  10. ADO.net数据访问方法

    ADO.NET是一组用于和数据源进行交互的面向对象的类库. 核心组件有两个: DataSet 是 ADO.NET 的非连接(断开)结构的核心组件.DataSet 的设计目的很明确:为了实现独立于任何数 ...