图论中
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
功能,在节点a和b中连条单向边,方向a->b
图论中以边为核心,所有的idx为边编号,第一条边,第二条边
e[idx] ,idx为边编号,e[idx]为该边的终点
e[idx]=b,编号为idx的边,终点为b
ne[idx], idx为边编号,ne[idx]为该边同起点的下一条边编号,例如节点a原来有3条边,分别编号为1,2,3
h[a] ,结点编号为a的第一条边的编号。节点h[a]=1
链表的头插法,插入的是节点。图中用头插法,插入的是边。
ne[idx]=h[a]
h[a]=idx++ ,//更新节点a的头条边
单链表中
void add_to_head(int x){
e[idx]=x;
ne[idx]=head;
head=idx++;
}
实现功能,将值为x的节点插入到链表的头节点
单链表的核心是点,所有idx都是点的编号
e[idx],idx点编号,e[idx]表示编号为idx的点的值
ne[idx],idx点编号,ne[idx]表示编号为idx的点,其next指针为多少,(每个节点都包含val和next)
head,整个单链表的头节点
e[idx]=x,编号为idx的点,其值为x;
ne[idx]=head,编号为idx的点,其next指针指向头节点(头插法)
head=idx++,head头结点指针指向编号为idx的点,就是刚刚创建的点。
写的真好,记录一下。