数组表示邻接表储存图
//n表示顶点个数,m表示边的条数
int n,m,i;
//u,v,w大小要比m最大值大1
int u[6],v[6],w[6];
//first,next大小要比n最大值大1,
//因为u[i]代表的是一条边的起始端点,可以到5
int first[5],next[5];
scanf("%d %d",&n,&m);
//初始化first,表示1~n顶点暂时都没有边
for(i=1; i<=n; i++)
first[i]=-1;
for(i=1; i<=m; i++)
{
//读入每一条边
scanf("%d %d %d",&u[i],&v[i],&w[i])
//u[i]代表起点,也说明u[i]这一点有了一条边
//first[i]数组,其实储存的是最后一次以i为起点的边在uvw中的位置
//如果不为-1,则继续找next[first[i]],即下一个节点,操作,直到next[k]为-1
//next[i]数组储存下一个以i为起点的边在uvw中的位置
next[i]=first[u[i]];
first[u[i]]=i;
}
k=first[1]
while(k!=-1)
{
cout<<u[k]<<v[k]<<w[k];
k=next[k];
}
//遍历每个顶点的边
for(i=1; i<=n; i++)
{
k=first[i];
while(k!=-1)
{
cout<<u[k]<<v[k]<<w[k];
k=next[k];
}
}
/*
4 5
1 4 9
4 3 8
1 2 5
2 4 6
1 3 7
*/