hello大家好,我是程序猿eric。我在6月份讲搜图的时候说过一个“前向星”结构,承诺过大家要带来一期专题关于这个,今天他来了!老规矩,有喜欢我的给个点赞加关注,你们的流量是我更新的动力!这期点赞破200我就日更,大家加油啊!
我们在存图的时候会首先用邻接矩阵,但是这种方式如果来存一个稀疏图,那就十分的占空间。
所以我们发明了前向星存法,就是以边为单位存储,记录起点、终点和权值,重点在于需要排序:首先根据起点排序,完成后一样的起点的边会并列在一起。然后在起点相同的情况下,再根据终点排序,使用的时候,只需要按照次序使用即可。
但是!前向星是要排序的,时间比较长。所以我们考虑用一种更优化的方式,叫链式前向星。这是个折中一点的方案,效率高,空间花费少,时间也更短一些,而且主要的代码只有四行。
链式前向星是要完成所有以同一个点为起点的节点所形成的链式结构,每条单独的链通过数组连接。
是不是想起了一个叫链表的东西?链式前向星其实就是基于他来的,是一种静态的邻接表。
基本代码是这样的,注释部分在搜带权值的图时要加上。
void add(int x, int y, int z)
{
//w[idx] = z;存边的权值
e[idx] = y;//存边的终点
ne[idx] = h[x];//记录上一条边的位置,上一条边不存在则为-1
h[x] = idx++;更新以x为起点上一条边的编号。
}
这个在很多搜索都有用,相当的重要,请大家务必把这四行代码背过!
好了,今天我们先扯到这,下期再见!