二维数组的构建(链式前向星)

2019-06-14  本文已影响0人  雨落八千里

由于点的数量太大,二维数组存储不了,于是构建结构体
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 5

edge[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为始点的两条边
第七条和第五条

上一篇 下一篇

猜你喜欢

热点阅读