码迷,mamicode.com
首页 > 其他好文 > 详细

邻接表的使用及和vector的比较

时间:2014-08-27 11:03:57      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:style   使用   for   div   代码   sp   on   size   ad   

这几天碰到一些对建边要求挺高的题目。而vector不好建边,所以学习了邻接表。。

下面是我对邻接表的一些看法。
邻接表的储存方式
邻接表就是就是每个节点的一个链表,并且是头插法建的链表,这里我们首先用数组进行模拟。。first [u],next[e]分别表示节点u的第一条边的编号,第e条边的下一条边的编号。。则实现代码为:
next[e]=head[u[e]];
head[u[e]]=e;

然后如果和结构体进行搭配使用会非常使用。。
struct Edge
{  
   int to,val,next;
}edge[maxn];
int head[maxn];
void addedge(int x,int y,int val)
{
    edge[++cnt].to=y;
    edge[cnt].val=val;
    edge[cnt].next=head[x];
    head[x]=cnt;
}
而相应的邻接表的遍历方式也就出来了
for(int i=head[x],i!=-1;i=next[i])
第二种遍历方式为:
for(int i=head[x],i!=-1;i=edge[i].next)
而vector也可以达到与邻接表相同的效果,vector容器实则是一个动态数组,但是与邻接表不同的是,它是顺序存储的.那么存储和遍历都很简单
遍历for(int i=0;i<vec[x].size();i++)
表示形式就是跟数组一模一样。。
自己的一些理解,请指正。。。

邻接表的使用及和vector的比较

标签:style   使用   for   div   代码   sp   on   size   ad   

原文地址:http://blog.csdn.net/u014303647/article/details/38865357

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