【数据结构】链式向前星知识点&代码
代码:
struct NODE{
int to;
int nxt;
int c;
}node[MM];//链式向前星
int head[NM],lcnt=;
void add(int a,int b,int c){
node[lcnt].to=b;
node[lcnt].c=c;
node[lcnt].nxt=head[a];
head[a]=lcnt++;
}
显示神奇代码
1.使用结构体构建链式向前星的容器
链式向前星本质上是使用链表存边,一条链表代表着一个点发出的所有边。所以一个这个结构体代表着这条链表中的一项
struct NODE{
int to; //指向下一条边
int nxt; //指向同一个点发出的另一条边
int c; //边权
}node[MM];//链式向前星
2.第一条边——head和边的编号
NM是一个常量,代表着点的数量;
head代表着一条链表的第一个项,也就是一个点所发出的第一条边(第一的意思是可以从这链表的这一项一直跳完所有项),至于如何实现请看 3 部分。
lcnt是赋予边编号的变量,之所以初始化为1,请看 4 部分。
int head[NM];
int lcnt=1;
3.三个变量一台戏——如何加边(add)
a,b,c分别代表入边,出边,权值
这个函数设置编号为lcnt的边,将to指向的是节点编号
重点在nxt的操作上。将nxt赋值为a节点的“第一条边”,那么就是说这个点接下来的可以跳的边或者说链表的项是 head[a]
接下来将”第一条边”赋值为当前的编号,那么下一次添加以a为源点的边可以跳的边或者说链表的项就是现在的边或者说项了。
那就意味着最后一次添加的边(项),可以一直跳到第一次添加的边(项),也就符合我们在第 2 条定义的“第一条边”了。
别忘了将编号++,以便下次使用。
void add(int a,int b,int c){ //改变编号为lcnt的边
node[lcnt].to=b; //出边指向b
node[lcnt].c=c; //记录权值
node[lcnt].nxt=head[a]; //将其指向目前的”第一条边“,也就是说能跳到”第一条边”
head[a]=lcnt++; //“第一条边”更新为目前的编号,那么下一条边能够跳到这一条边,那么最后的head自然就是真正的“第一条边”了;编号++一遍下次使用
}
4.遍历某个点所连接的所有边
要遍历就可以利用前面求出的”第一条边“和这些链表了。
自然可以用for,从一开始将循环变量i初始化为要遍历的源点k的”第一条边“,head[k]
在判断的时候,判断是否还有下一条边,这时候就是lcnt初始化为1的作用了。如果没有初始化为1,就会存在编号为0的点,判断就会误认为已经结束了。
于是判断就必须写i!=-1了,但是打"=1"只需要两个字符,而"i!=-1"比起"i"要多4个字符,而且不符合我们人类的思维习惯:从1开始,所以我们采用lcnt初始化为1
(“i”在C++里的意思是简写的 i!=0 )
然后到每次循环结束做的改变,自然是直接跳到链表的下一项。
for(int i=head[k];i;i=node[i].nxt){
int u=node[i].to;
//u就是所连接的点
int v=node[i].c;
//v就是边的权值
}
5.注意双向边
如果你的题目要求是双向边的话,加边操作需要进行两次:
add(a,b,c);
add(b,a,c);
注意,这时候node数组需要开两倍于边数的空间
【数据结构】链式向前星知识点&代码的更多相关文章
- 【bfs+链式向前星】防御僵尸(defend)计蒜客 - 45288
题目: A 国有 n 座城市,n−1 条双向道路将这些城市连接了起来,任何两个城市都可以通过道路互通. 某日,A 国爆发了丧尸危机,所有的幸存者现在都聚集到了 A 国的首都(首都是编号为 1 的城市) ...
- 图论 ---- spfa + 链式向前星 ---- poj 3268 : Silver Cow Party
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12674 Accepted: 5651 ...
- Tarjan模版(链式向前星表示方法)
这道模版用到了链式向前星表示法: struct node { int v,next; }edge[]; void add(int x,int y) { edge[++cnt].next=heads[x ...
- 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 19881 Accepted: 711 ...
- 图论 --- spfa + 链式向前星 (模板题) dlut 1218 : 奇奇与变形金刚
1218: 奇奇与变形金刚 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 130 Solved: 37[Submit][Status][Web Boa ...
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- 数据结构 链式哈希表(Hash Table)的接口定义与实现分析(完整代码)
链式哈希表的接口定义 关于哈希表与链式哈希表的描述可以参阅:http://www.cnblogs.com/idreamo/p/7990860.html 链式哈希表的操作与属性有:初始化.销毁.插入元素 ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- c数据结构链式存储-静态链表
#include "string.h" #include "ctype.h" #include "stdio.h" #include &qu ...
随机推荐
- Android 升级安装APK兼容Android7.0,解决FileUriExposedException
我们在开发app时避免不了需要添加应用内升级功能.当app启动时,如果检测到最新版本,将apk安装包从服务器下载下来,执行安装.安装apk的代码一般写法如下,网上随处可以搜到 public stati ...
- DeltaFish 校园物资共享平台 第八次小组会议
DeltaFish 校园物资共享平台 第八次小组会议 记录人:娄雨禛 2018.7.31 会议总结 1. 对前端界面进行改进,具体改进内容如下: 2. 后端从登录和注册的具体实现做起,熟悉流程之后完成 ...
- linux 安装 mongo
整个安装过程:下载安装包--> 解压,添加系统路径(是滴,不用安装解压即可) --> 创建数据目录 --> 启动mongod服务 --> 运行mongo 1.下载安装包 Mon ...
- Hive扩展功能(三)--使用UDF函数将Hive中的数据插入MySQL中
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- 【译】x86程序员手册05 - 2.3寄存器
2.3 Registers 寄存器 The 80386 contains a total of sixteen registers that are of interest to the applic ...
- MSSQL高并发下生成连续不重复的订单号
一.确定需求 只要做过开发的基本上都有做过订单,只要做过订单的基本上都要涉及生成订单号,可能项目订单号生成规则都不一样,但是大多数规则都是连续增长. 所以假如给你一个这样的需求,在高并发下,以天为单位 ...
- Sersync+Rsync实现数据文件实时同步
rsync+inotify-tools与rsync+sersync架构的区别1,rsync+inotify-tools只能记录下被监听的目录发生的变化(增删改)并没有把具体变化的文件或目录记录下来在同 ...
- 从0开始复习JS---1、函数复习
1. 写一个函数,实现对数字数组的排序. function get_order(array){ for(var i = 0; i <array.length-1; i++){ for(var j ...
- 洛谷——P1196 [NOI2002]银河英雄传说
P1196 [NOI2002]银河英雄传说 题目大意: 给你一个序列,支持两种操作: 合并指令为$M_{i,j}$j,含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所 ...
- Vivaldi解决flash插件问题
Vivaldi浏览器 Vivaldi是Opera联合创始人.前CEO谭咏文(Jon von Tetzchner)2015年1月27日发布的一款浏览器,具有个性化的笔记功能,带有迷你屏幕截图的书签,以及 ...