/*邻接表储存图结构本质上是将图上的每条边都储存起来
我们希望通过边被添加的顺序序号来储存边
假设(1,2)是第一条被添加的边,(1,4)是第四条,(1,3)是第五条,他们是关联1的所有边
即edge[0].u=1;edge[0].v=2
edge[3].u=1;edge[3].v=4
edge[4].u=1;edge[4].v=5
我们希望
edge[0].next=-1;
edge[3].next=0;
edge[4].next=3;
head[1]=4;
从而实现链式顺序
若想要遍历1的所有邻接节点
cur=head[1]
while(cur!=-1){
visit(edge[cur].v) //对1的邻接节点进行某些操作
cur=edge[cur].next;
}
*/
struct edge{
int u,v; //u,v都是点的序号
int next;
}[]
int head[];
memset(head,-1,sizeof(head));
int n; //此时edge的序号
void addedge(int x,int y){ //此时添加的是第n条edge
edge[n].u=x;
edge[n].v=y;
edge[n].next=head[x];
head[x]=n;
n++;
}
n=0;
while(int i=0;i<E;i++){
addedge(x,y);
}