边表
今天听完老师讲了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; }
至此,看不懂我就没办法了,只是写来提醒自己的
---QQ:2602626065