zoukankan      html  css  js  c++  java
  • 树的存储方式数组链表+vector

    图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2

    模板如下:

    struct edge{

        int u,v,w,next;

    }edge[N*3];

    int first[N],t;

    void init()

    {

        t = 0;

        memset(first,-1,sizeof(first));

    }

    void add(int u,int v,int w)

    {

        edge[t].u = u;     //u:第i条边的起点

        edge[t].v = v;     //v:第i条边的终点

        edge[t].w = w;    //w:权值

        edge[t].next = first[u];   //next:第i条边的前一条边(此链表上)

        first[u] = t++;     //first[i]:顶点i对应的边

    }

    遍历:反向遍历一条边

    for(int i = first[u];i!=-1;i = edge[i].next)

    ……

    BFS遍历所有节点

    for(i = 1;i<=n;i++)

    {

        k = first[i];

        while(k!=-1)

            k = edge[i].next;

    }

    DFS遍历所有节点(略)

    具体问题:待续

    一、vector 简介及基本操作:

    1、vector是c++中stl库中封装好的容器,常用定义不定长数组来构建无向图或有向图.

    2、基本操作:

    (1)头文件#include<vector>.

    (2)创建vector对象,vector<int> vec;

    (3)尾部插入数字:vec.push_back(a);

    (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

    (5)使用迭代器访问元素.

    vector<int>::iterator it;

    for(it=vec.begin();it!=vec.end();it++)

        cout<<*it<<endl;

    (6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

    (7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

    vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

    (8)向量大小:vec.size();

    (9)清空:vec.clear();

    vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

    如下例:

    struct node {int s, t  , v ; };

    vector <node>G[ ];

    二、构建图:

    (1) 定义不定长数组 vector <int> map[100010] ;

     (2)    建边

              for(i=1; i < = n ; i + +)

              {

                    scanf("%d %d",&s,&t);

                    map[s].push_back(t);

                    map[t].push_back(s);                //有向图时,此步省略。

              }

    (3)遍历

          for (i=0; i< = map[s].size(); i++)

            printf("%d ",map[s][i]);

         

    http://codeforces.com/contest/717/problem/E

  • 相关阅读:
    韩式英语
    Daily dictation 听课笔记
    words with same pronunciation
    you will need to restart eclipse for the changes to take effect. would you like to restart now?
    glottal stop(britain fountain mountain)
    education 的发音
    第一次用Matlab 的lamada语句
    SVN的switch命令
    String的split
    SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
  • 原文地址:https://www.cnblogs.com/caitian/p/5873948.html
Copyright © 2011-2022 走看看