链式前向星比vector邻接表在内存性能和时间性能上更好。
链式前向星用法详见以下模板代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;//最大点数
const int maxm=1e6+10;//最大边数
struct node{int to,w,next;}edge[maxm];//边集,to终点,w边权,next同起点的上一条边的编号
int n,m,head[maxn];//输入n个点,m条边
struct Chain_Forward_Star{//链式前向星
int cnt;
void init(){//初始化
cnt=0;
memset(head,-1,sizeof(head));//初始化为-1
}
void add(int u,int v,int w){//加边,u起点,v终点,w边权
edge[cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];//同样以u为起点的上一条边的编号
head[u]=cnt++;//更新以u为起点的上一条边的编号
}
}CFS;
int main()
{
int u,v,w;
cin>>n>>m;
CFS.init();
for(int i=1;i<=m;i++){
cin>>u>>v>>w;//u起点,v终点,w边权
CFS.add(u,v,w);
//CFS.add(v,u,w);
}
for(int i=1;i<=n;i++){
cout<<i<<endl;
for(int j=head[i];~j;j=edge[j].next)//倒序遍历以i为起点的边,~j即j!=-1
cout<<i<<' '<<edge[j].to<<' '<<edge[j].w<<endl;
cout<<endl;
}
return 0;
}