
由于点的数量太大,二维数组存储不了,于是构建结构体
cnt记录的是第几条边
结构体中的next表示的是与此条边相同始点上一条边的id
结构体中的v表示的是此条边的终点
head数组记录的是每个点对应的边的id
head数组初始值全为-1
void add(int x,int y)
{
edge[++cnt].next=head[x];
edge[cnt].v=y;
head[x]=cnt;
return ;
}
![]()
如图8条边,6个顶点
1 2
1 4
2 3
3 6
5 6
4 5
5 1
2 5edge[1].next=head[1]=-1; edge[1].v=2; head[1]=1; edge[2].next=head[1]=1; edge[2].v=4; head[1]=2; edge[3].next=head[2]=-1; edge[3].v=3; head[2]=3; edge[4].next=head[3]=-1; edge[4].v=6; head[3]=4; edge[5].next=head[5]=-1; edge[5].v=6; head[5]=5; edge[6].next=head[4]=-1; edge[6].v=5; head[4]=6; edge[7].next=head[5]=5; edge[7].v=1; head[5]=7; edge[8].next=head[2]=3; edge[8].v=5; head[2]=8;
引用时:
for(int i=head[x];i!=-1;i=edge[i].next)
当x=5时:
i=head[5]=7; i=edge[7].next=5; i=edge[5].next=-1;
刚好对应着以5为始点的两条边
第七条和第五条
网友评论