邻接表存图

Posted hoyoak

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了邻接表存图相关的知识,希望对你有一定的参考价值。

邻接表也叫边表,也是OI中常用的存图方法之一,以后所有的图论算法

我都打算用这个写,具体也不难理解。

这种存图方式是用了N(点的个数)个链表将整个图串联起来,串联方式

便是那个first数组。

我们首先定义了一个结构体,结构体一共有三个参数,终点,权值,这个边

的下一条边。

具体操作:每当输入一条边的数据时,我们将这组数据送进加边函数(也可以

直接写在main函数中的for循环里)cnt是边数,是一个给每条边编号的工具

我们存一下第cnt条边的终点权值以及与cnt相关的下一条边,这个串联是通过

起点来串起来的,把同一起点出发的所有边串联起来,具体把first[s]赋给

edge[cnt].next,所以这样next就是上一条边的编号first[s],再把cnt的值

赋给first[s],这样下一条加入的以这个边为起点的边则会指向这条边

如果是加入的第一条以这个点为起点的边那么first[s]此时等于零,把零赋

给next也就意为没有下一条边了。

code:

#include<cstdio>
#include<iostream>

using namespace std;

struct node
{
    int end;
    int len;
    int next;
};
node edge[2333];
int m,n,first[2333],cnt;

void add_edge(int s,int e,int d)
{
    cnt++;
    edge[cnt].end=e;
    edge[cnt].len=d;
    edge[cnt].next=first[s];
    first[s]=cnt;
    return;
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int s,e,d;
        cin>>s>>e>>d;
        add_edge(s,e,d);
        add_edge(e,s,d);
    }
    return 0;
}

 

以上是关于邻接表存图的主要内容,如果未能解决你的问题,请参考以下文章

生化危机 邻接表存图+BFS

ACM模板——链式前向星&&邻接表存图

HDU 4857 逃生(拓扑排序逆向+邻接表存图)

SDOI2010_大陆争霸(邻接表存图)

链表存图 数据待加强

邻接表边节点是啥