链式前向星存图(适合初学者);

//修改自2018.12.4 23:36

前向星是一种特殊的边集数组也是一种数据结构,以储存边的方式来存储图借用结构体来实现存储边的一种特殊的存储结构;

主要的代码如下

#define maxn=100100;

 struct  node

{    int  w;//代表这条边的边权数值;

      int  e;//代表以这条边为结尾的点的下标值;

      int  next;//表示与第i条边同起点的上一条边的存储位置

}ed[maxn];

int head [maxn];//用来存储边的位置

int tot =0;

add (int u,int v,int w)

{

  ed[tot].w=w;//表示第i条边的权职是多少

  ed[tot].e=v;//表示第i条边的终点

  ed[tot].next=head[u];//head[i]表示以i为起点最后一条边的存储位置

  head[u]=tot++;

}

这样前星存图就这样构造完成了;接下来就是如何查询图中的边的存储情况了;

memset(head,-1,sizeof(head));

  int st;  scanf("%d",&st);//st表示以为st为起点

for(int i=head[st];i!=-1;i=ed[i].next)

{

cout<<st<<" - >"<<ed[i].e<<endl;

}

例如:输入 3条边;每条边输入3个数值分别代表起点终点,还有边权值分别为 1 2 3 , 2 3 1 ,1 3 2存储的过程如下所示

  ed[0].w=3; ed[0].e=2,ed[0].next=head[1],head[1]=0;

ed[1].w=1;ed[1],e=3,ed[1].next=head[2];head[2]=1;

ed[2].w=2,ed[2].e=3,ed[2].next=head[1];head[1]=2;

然后你会发现head就是存储以i开头的前一条边的位置,然后要是遍历的时候是先输出你要查询那个开头存储的最后一条边然后依次往前遍历输出所有的边

猜你喜欢

转载自blog.csdn.net/qq_40623603/article/details/84799261