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++代表边数加一

  • 相关阅读:
    串口通信(2)
    串口通信(1)
    extern关键字的使用
    volatile关键字的使用
    Uart串口与RS232串口的区别
    DSP5509的时钟发生器(翻译总结自TI官方文档)
    DSP中的cmd文件
    pragma伪指令
    在C语言中嵌入汇编语言
    another app is currently holding the yum lock;waiting for it to exit...
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/10161547.html
Copyright © 2011-2022 走看看