图的储存--邻接表
我学过的图的存储方式有两种,一种是用邻接矩阵存储,邻接矩阵的优点是可以快速判断两个顶点之间是否存在边,可以快速添加边或者删除边。但是他也有很明显的不足,那就是邻接矩阵的大小只能根据点来定义,若一个图的点较多但是边很少,如果用邻接矩阵来储存会浪费很大多的空间资源,这时我们的 邻接表登场了!!! 邻接表就是根据边来定义大小的。 介绍一下邻接表,邻接表可以用结构体 + 指针实现 也可以由结构体 + 数组实现 今天讲一下 结构体 + 数组 来实现邻接表 结构体模板 : #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXN 10000 struct { int value; //用来存边的权值 int to; //用来存边的末端 int next;// 用来储存下一条边的编号 }edges[MAXN]; int cnt = 0; //第一边的编号为零 int head[MAXN]; //储存以 i 为 始点的边的编号 void init(){ memset(head,-1,sizeof(head)); //初始化每个点均没在边中 } void add(int u,int v,int value){ edges[cnt].to = v; //编号为 cnt的边的末端 edges[cnt].value =