链式前向星,简而言之便是一条边穿着另一条边,即让每一个节点记住自己相连接的边,这样便能够储存更多边的信息。模版如下:
int head[MAX];
struct Edge{
int n,to,dis;
}edge[500005];
void addedge(int from,int to,int dis)
{
edge[++num].n=head[from];
edge[num].to=to;
edge[num].dis=dis;
head[from]=num;
}
后面若要增加一条边调用方法即可
cin>>a>>b>>c;
addedge(a,b,c);
其原理是用结构体记录边的信息,并且在head数组中记录每一条边的起点在结构体集合(edge[5000005])中的下标位置,并在该结构体的n记录同一起点在head数组中的下标
因此,若要读取边的信息,只需要使用while循环直到结构体中的下一个点(edge.n)等于0时即可。
如果你要找起点为now的边时,代码如下
//a为在head中记录最晚的edge下标
int a = head[now];//now为起点
while(1){
//edge[a].dis为now到edge[a].to的长度
cout<<edge[a].dis;
a = edge[a].n;
if(a==0)break;
}
这边是这篇文章的所有内容,若有不对之处欢迎在评论区留言指教,谢谢