https://blog.csdn.net/weixin_49534916/article/details/124699883这篇文章讲的真细啊,神犇%%%,这里我写一下简化代码版,不用他的结构体也可以实现,原理和他一样
链式前向星存图的加边操作 head[x]
是点x为起点的第一条边的位置 nxt[i]
是与第i条边同起点的下一条边的位置,如果为0则代表当前是最后一条 to[i]
是第i条边的指向节点 如果有边权,新加一个w[i]
即可
int head[N],nxt[M],to[M];
int cnt=0;//cnt是总边数
void add(int x,int y){
//添加一条从x到y的边
nxt[++cnt]=head[x];//新边的下一条边是以前的第一条边
head[x]=cnt;//新边作为x为起点的第一条边
to[cnt]=y;//新边的指向节点
}
访问操作
for(int i=1;i<=n;i++){
//i是枚举所有节点
for(int j=head[i];j;j=nxt[j]){
int y=to[j];
//这是一条从i到y的边
//int y这个操作看上去多余,实际上可以辅助理解,在复杂操作时可以帮助理清思路
cout<<i<<"->"<<y<<endl;
}
}
看不懂背就完事了