图的存储
图的存储
距离上次学习图论已经是上次的事情了 三年前的事情了,因为科协作业中有着三题关于图论的内容(两题单源最短路径,一题最近公共祖先)所以现在又得开始试着学习图的内容,也终于算是有机会深入学习图是如何存储的(我指的是链式前向星,自己从来没有理解这个图的存储方式是怎样的)
我将以以个人理解去学习这块内容
首先邻接矩阵这种东西就不去解释了。。。
主要是链式前向星
首先建立结构体:
struct edge{
int next;//表示与第i条边同起点的下一条边的存储位置
int to;//to表示边的
int w;//边权值
}edge[N];//edge[i]表示第i条边
存边时:
void add(int u,int v,int w)
{
edge[cnt].w = w;
edge[cnt].to = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
同时还要建立head[N],它是用来表示以i为起点的第一条边存储的位置,但这里要注意,在输入的时候最后一条以i为起点的边将会在遍历的时候作为第一条边
head[N]初始化为-1,cnt初始化为0
这样在遍历时是倒着遍历的,也就是说与输入顺序是相反的,不过这样不影响结果的正确性.

浙公网安备 33010602011771号