链式前向星
一种特殊的存边方式
存储结构
int cnt;
struct node{
int to,nxt,w;
}e[N*2];
int head[N*2];
cnt : 边的编号
e[cnt].to : 边的终点
e[cnt].nxt : 与此边同一起点的下一个边的编号
w : 边权
head[u] : 以u为起点的第一条边的编号
N*2 : 双向建边
(不懂可以往下看看加边代码)
初始化
for(int i=0;i<N*2;i++){
e[i].nxt=-1;
head[i]=-1;
}
加边
void add(int u,int v,int w){
e[cnt].to=v;
e[cnt].w=w;
e[cnt].nxt=head[u];
head[u]=cnt++;
}
这里的加边过程会与上面的定义不符:
e[cnt].nxt : 与此边同一起点的上一个边的编号
head[u] : 以u为起点的最后一条边的编号
但正序和倒序对结果并无影响
遍历
for(int i=head[u];~i;i=e[i].nxt){ //遍历节点i的所有儿子 ~i 可写作 i!=1
if(e[i].to!=father){ //除去父亲
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】