图的高siao存储结构——链式前向星

假期训练题好多啊,都没时间写博客了。。

(其实就是懒)

前几天jieba开了图论,好多新东西,一脸懵逼。。。

讲到链式前向星的时候还以为是星打错了,之后才具体了解。

现在会使用的图的存储方式有三种

1、邻接矩阵

对于数据不大的图,用这个方法存比较简明。开一个a【n】【n】的数组,可以记录联通情况或者权值(如果有权值的话)

2、邻接表

对于每个节点i,开一个vector用来存储以其为顶点或者起始点的边(可以是结构体,用来存权值,终点等信息)

具体代码:

vector<bian> ljb[n];

//插入边时:
bian tem(b)//构造
ljb[a].push_back(tem);

3、链式前向星


struct node//这个是边的结构体
{
int to;//记录这条边的中点
int w;//权值
int next; //当前顶点所对应的下一条边
};


node bian[80010];
int head[80010];/*用来存储每个顶点的第一条边在bian数组中的位置,初始化 为-1,若head[i]==-1,说明没有以顶点i为起点的边*/



//更新前向星的函数:
int p=0;//用来记边数的全局变量
void add(int u,int v,int w)//起点为u,终点为v,权值为w
{
bian[p].to=v;
bian[p].w=w;
bian[p].next=head[u];
head[u]=p++;/*在更新时是倒着更新的,所以最后遍历的顺序是从后往前*/
}

//遍历整个图时的代码:
for(int i=1;i<=n;i++)
{
    for(int j=head[i];j!=-1;j=bian[j].next)
       {......}
      //以i为起点,以bian[j].to为终点的边
  
}

把自己这几天的收获写在这里,方便加深一下印象。假期一半还没过去,不能松懈啊!

此地非逐弃者之王座,彼方乃行愿者之归所。无限清澈,星界银波。
原文地址:https://www.cnblogs.com/brotherHaiNo1/p/7267792.html