/*邻接表储存图结构本质上是将图上的每条边都储存起来 我们希望通过边被添加的顺序序号来储存边 假设(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); }
原文:http://www.cnblogs.com/neverchanje/p/3536910.html