zoukankan      html  css  js  c++  java
  • 图的存储——链式前向星

    第一次听讲道理没听懂是啥玩意
    然后觉得可能用处不大就没管
    当我学Tarjan的时候,我哭了…

    链式前向星

    定义

    前向星是一种特殊的边集数组。将边集数组中的每条边按照起点排序,起点相同按终点排序。记录下某个点为起点的所有边的数组中的起始位置和存储长度。

    优势

    可以在O(1)的时间找到以i为起点的第一条边,以O(len[i])的时间找到以i为起点的所有边的长度。但对于所有边按起点排序,以快排计算,至少为O(eloge)的时间复杂度。

    如果将链表引入前向星,将会得到大幅优化。

    代码实现

    1.边集数组:

    struct edge{
    
    int e,n,w;
    
    }edges[MAXN];

    e表示起点,n来存同起点的下一条边的位置,w是权重啦。maxn…最大边数。如果顶点数为n,那么MAXN=n*(n-1)/2

    2.haad数组

    顾名思义,存以i为起点的第一条边出边的存储位置。也就是以i为起点的所有出边的存储的起始位置

    3.idx

    记录边数的int变量…没啥说的…

    加边函数

    const int MAXN=101;//最大的顶点个数
    struct edge{
        int e,n,w;
    }edges[MAXN*(MAXN-1)];
    int head[MAXN],idx=0;
    void addedges(int u,int v,int w){
        edges[++idx].e=v;
        edges[idx].w=w;
        edges[idx].n=head[u];
        head[u]=idx;
    } 
  • 相关阅读:
    Bzoj1305 [CQOI2009]dance跳舞
    Bzoj1269 [AHOI2006]文本编辑器editor
    Bzoj2957 楼房重建
    POJ1704 Georgia and Bob
    UVa11427 Expect the Expected
    POJ2096 Collecting Bugs
    Bzoj3041 水叮当的舞步
    Bzoj3894 文理分科
    Bzoj1426 收集邮票
    Bzoj1076 [SCOI2008]奖励关
  • 原文地址:https://www.cnblogs.com/Uninstalllingyi/p/10466189.html
Copyright © 2011-2022 走看看