zoukankan      html  css  js  c++  java
  • 边表

    今天听完老师讲了vector的坏处

    因为之前都是使用vector+结构体来存图的

    通过老师一讲,我才发现

    vector在某些情况下是会爆空间

    为了考试不爆零,我觉得有必要学习一下边表的写法

    网上调了几篇博文,这里自己也做个总结

    首先需要一个结构体

     struct { int to,dis,Next; }a[m]; 

    to存终点

    dis存距离

    Next存下一条边所在的a中的位置

    既然是这么存边,那么数组我们只需要开到大概m(m为边数)就够了

    接着我们需要一个指引开头的东西

    我们把它叫做head数组好了

    这里我们需要把head全都初始化为-1

    还要一个k表示当前边的编号

    k=0

    第一条边这么存

    比如1-->3,距离为5

      k++; a[k].to=3;

    a[k].dis=5;

    a[k].Next=head[1];

    head[1]=k; 

    再比如2-->8,距离为9

        k++;
        a[k].to=8;
        a[k].dis=9;
        a[k].Next=head[2];
        head[2]=k;

    那么我们查询的时候怎么知道结束了

    刚刚我们已经先把head设为-1了

    所以我们只要直接判断当Next不为-1就行了

    查询代码如下

    for(int i=head[x];i!=-1;i=a[i].Next)
    {
          v=a[i].to;
          dist=a[i].dis;
    }
    

      

    至此,看不懂我就没办法了,只是写来提醒自己的

  • 相关阅读:
    bzoj1027 状压dp
    CodeForces755F 贪心 + 多重背包二进制优化
    CodeForces632E 神奇的多重背包
    POJ3662 SPFA//二分 + 双端队列最短路
    bzoj1233 单调队列优化dp
    POJ3417 LCA+树dp
    Network
    树网的核/[SDOI2011]消防
    [APIO2010]巡逻
    核心城市
  • 原文地址:https://www.cnblogs.com/helloworld-c/p/4855936.html
Copyright © 2011-2022 走看看