链式前向星

当图非常稠密,达到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");
    }
posted @ 2025-05-07 23:06  _窗帘  阅读(42)  评论(0)    收藏  举报