链式前向星是ssfz神牛Malash创造的(至少Baidu上没有搜到)名词,或许这种数据结构有其他更加正规易懂的名字,但我还是没有搜到。(有一个资料称之为加上next数组前向星,但这个名字实在不好) 该数据结构可能是Jason911神牛或其他神牛发明的。
如果说邻接表是不好写但效率好,邻接矩阵是好写但效率低的话,前向星就是一个相对中庸的数据结构。前向星固然好些,但效率并不高。而在优化为链式前向星后,效率也得到了较大的提升。虽然说,世界上对链式前向星的使用并不是很广泛,但在不愿意写复杂的邻接表的情况下,链式前向星也是一个很优秀的数据结构。
模板代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000+5;
const int maxm = 1000+5;
struct Edge{
int to,cost,next;
}edge[maxm];
int cnt,head[maxn];
void init(){
memset(head,-1,sizeof head);
cnt=0;
}
void addedge(int u,int v){
edge[cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt++;
}
int main(){
int n,m,u,v;
scanf("%d %d",&n,&m);
init();
for(int i=1;i<=m;i++){
scanf("%d %d",&u,&v);
addedge(u,v);
}
for(int i=1;i<=n;i++){
for(int j=head[i];~j;j=edge[j].next){
printf("%d->%d\n",i,edge[j].to);
}
}
return 0;
}