图的存储

图的存储

距离上次学习图论已经是上次的事情了 三年前的事情了,因为科协作业中有着三题关于图论的内容(两题单源最短路径,一题最近公共祖先)所以现在又得开始试着学习图的内容,也终于算是有机会深入学习图是如何存储的(我指的是链式前向星,自己从来没有理解这个图的存储方式是怎样的)
我将以以个人理解去学习这块内容

首先邻接矩阵这种东西就不去解释了。。。
主要是链式前向星
首先建立结构体:

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

这样在遍历时是倒着遍历的,也就是说与输入顺序是相反的,不过这样不影响结果的正确性.

posted @ 2022-10-11 23:47  kayoki  阅读(29)  评论(0)    收藏  举报