zoukankan      html  css  js  c++  java
  • 链式前向星

    由于要带18学弟,所以顺便写一些知识

    在图论中建边方法有很多(n是点数,m是边数)

    1. 二维数组,最简单最方便。空间复杂度n2,耗费多少资源就不多说了
    2. Vector,比较简单方便,空间复杂度m,资源没有耗费,但是却有一些耗时,这是由于vector自身的原因(vector初始空间开假设为x,一旦大小超过x,就会申请一个2*x的连续空间,并把之前的数据转移过去,因此会有些耗时)
    3. 链式前向星,稍有难度,空间复杂度m,资源基本没有耗费,时间也比vector

    因此以后建图尽量使用链式前向星

    链式前向星模板

    struct E

    {

        int to,next;

    }edge[2*MAXN];

    int head[MAXN];

    int tot;

    void add(int x,int y)

    {

        edge[tot].to=y;

        edge[tot].next=head[x];

        head[x]=tot++;

    }

    void init()

    {

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

        tot=0;

    }

    其中head数组是判断每个点是否有边,初始化为-1,代表没有边,否则存储第一个边在

    结构体数组中的位置(也是数组下标)

    tot是存储已经存储多少条边了,初始化为0,代表没有边

    结构体数组中,to代表这条边指向哪里,next代表还有没有边,如果没有就是-1,有的话存储的是下一个边在结构体数组中的位置(也是数组下标)

    xy有一条边,则add(x,y),然后把结构体数组tot位置的to设置为ynext指向head[x](也就是之前存过的边,或者是-1)(其实就像链表一样连接起来,add是头插法),然后head[x]=tot++,代表x的第一条边是edge[tot](因为之前第一条存在edge[tot].next里面了),然后tot++代表边数加一

  • 相关阅读:
    volatile关键字
    线程的状态
    java中的匿名内部类
    java高精度实数和小数
    JS、JSP、ASP、CGI
    论文结构要求
    java中的标识符、关键字、保留字
    java IODemo
    Bagging和Boosting的区别
    由Memcached升级到 Couchbase的 Java 客户端的过程记录(一)
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/10161547.html
Copyright © 2011-2022 走看看