zoukankan      html  css  js  c++  java
  • 邻接表的使用及和vector的比較

    这几天碰到一些对建边要求挺高的题目。而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容器实则是一个动态数组,可是与邻接表不同的是,它是顺序存储的.那么存储和遍历都非常easy
    遍历for(int i=0;i<vec[x].size();i++)
    表示形式就是跟数组一模一样。。
    自己的一些理解,请指正。。。

  • 相关阅读:
    Python Challenge 第十二关
    Python Challenge 第十一关
    Python Challenge 第十关
    Python Challenge 第九关
    Python Challenge 第八关
    Python Challenge 第七关
    zepto
    zepto
    zepto
    zepto
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4019181.html
Copyright © 2011-2022 走看看