码迷,mamicode.com
首页 > 编程语言 > 详细

图论之邻接表的数组实现

时间:2016-05-11 07:28:39      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

虽然邻接矩阵真的很方便,很简单,很利于理解,但却有着一些重大缺陷;

当我们遇到的是一张稀疏图的时候,邻接矩阵就造成严重的空间浪费,更直接一点,就是根本存不下来;

这个时候就不得不考虑其他存图方式了,这个时候另一种流行的存图方式就登场了——邻接表,当然使用vector数组也是一种良好的选择;

邻接表的实现可以通过链表或数组的方式实现,我这里主要讲数组的实现方法;

首先,有三个数组,分别为u[max],v[max],w[max]分别代表着每条边的起点,终点,权重,而下标则代表着边的编号;

然后设立first[max],next[first]这两个数组;

first数组存储的是边的编号,下标代表的是边的起始结点;

next数组存储的是编号为i的前一条边的编号,其中i就是下标;

那么插入一条边的过程就是这样的:

首先将边读入到u,v,w这三个数组中;

然后根据u找到first数组中下标为u的那栏,如果为空,就将边的编号直接加入其中,否则,将这编号放入对应的next数组中,将first数组中存新加入的结点编号;


int n,m;//结点数目,边的数目
int u[1000],v[1000],w[1000];//边的起点,终点,权重
int first[1000],next[1000];
cin>>n>>m;
for(int i=1;i<=n;++i)
{
    first[i]=-1;//将-1作为标志,完成初始化
}
for(int i=1;i<=m;++i)
{
    cin>>u[i]>>v[i]>>w[i];
    next[i]=first[u[i]];
    first[u[i]]=i;
}


图论之邻接表的数组实现

标签:

原文地址:http://blog.csdn.net/leeholmes/article/details/51367842

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!