链式前向星存边

这边文章是基于网上流传最广的改编,改了点内容方便更好的理解。
在这里插入图片描述
我们输入边的顺序为:
1 2,2 3,3 4,1 3,4 1,1 5,4 5

void add(int u,int v,int w)
{
    edge[cnt].w = w;//记录权值
    edge[cnt].to = v;//第cnt条边的终点
    edge[cnt].next = head[u];//与第cnt条边同起点的下一条边位置
    head[u] = cnt++;//保存的是以u为起点的所有边中编号最大的那个
}

按上图模拟一下
add(1,2,w1)->edge[0].to = 2; edge[0].next = head[1]=-1;head[1]=0;
add(2,3,w2)->edge[1].to = 3; edge[1].next = head[2]=-1;head[2]=1;
add(3,4,w3)->edge[2].to = 4; edge[2].next = head[3]=-1;head[3]=2;
add(1,3,w4)->edge[3].to = 3; edge[3].next = head[1]=0; head[4]=3;
后面就不赘述了
edge[4].to = 1; edge[4].next = -1; head[4] = 4;
edge[5].to = 5; edge[5].next = 3; head[1] = 5;
edge[6].to = 5; edge[6].next = 4; head[4] = 6;

猜你喜欢

转载自blog.csdn.net/starmoth/article/details/84066118