边表

今天听完老师讲了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;
}

  

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

posted @ 2015-11-01 19:23  HELLO----WORLD  阅读(270)  评论(1编辑  收藏  举报