1.链式前向星存图
链式前向星存图相对邻接矩阵存图 能更有效的利用空间。
包含两个结构
struct node{
int to,val,next;
}e[M];
/*e[i]为第i条边的信息
e[i].to 为该边的终点
e[i].val 为该边的边权
e[i].next 为以该边起点为起点,最近存入的边的编号
*/
st[N] //st[i] 以i为起点,最近存入的边的编号
链式前向星存图的姿势如下:
int tot = 0;
void add(int u,int v,int w){
e[++tot].to = v;//存终点
e[tot].val = w;//存边权
e[tot].next = st[u];//存最近存入边编号
st[u] = tot;//更新st数组
}
那么就利用了 3 * M + N的空间存入了整个图的边的信息,并且利用struct中next的信息,将起点相同的边关联到了一起。
在遍历(如以cur为起点)的边的时候,只需从st[cur]出发,通过e[i].next不断转移到下一条边,直到e[i].next = -1(初始值)为止。代码如下:
for(int i = st[cur];i != -1;i = e[i].next)
spfa:
spfa是求单源最短路的一种方法,能求从某个起点出发,到图中各点的最短距离(最长距离)。