邻接表存图
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; }
以上是关于邻接表存图的主要内容,如果未能解决你的问题,请参考以下文章