链式前向星存图与遍历

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;
    }
}

看不懂背就完事了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注