链式前向星
当图非常稠密,达到10^6以上时,可以使用链式前向星来存图。
void add(int u,int v,int w)
{
e[cnt].to=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt++;
}
链式前向星的思路是:将每个边编号,从第一条边开始,记录这个边的终点以及权值,再用head数组来表示从某点出发最后一条边。例如head[u]表示从u出发,编号最靠后的边的编号,再用e.next来表示同起点的下一条边,例如边1-2,1-3,则e[id].next表示从u出发第id条边的下一个。
遍历的实现:
for(int i=1;i<=n;i++)
{
if(head[i])
{
for(int j=head[i];j!=0;j=e[j].next)
printf("%d %d %d\n",i,e[j].to,e[j].w);
}
else printf("\n");
}

浙公网安备 33010602011771号