图的邻接表存储法 又叫链式存储法 可以用数组模拟
定义
struct edge{
int next; //下一条边的编号
int to; //这条边到达的点
int dis; //这条边的长度
}edge[size];
//COYG
核心代码 加入一条从from到to距离为dis的单向边
inline void add(int from,int to,int dis)
{
edge[++num].next=head[from];
edge[num].to=to;
edge[num].dis=dis;
head[from]=num;
}
//COYG
举一个例子吧 别喷图
图上每一个边上的数字 既是编号 也是长度
就是这样一个简单图 按照上面的代码 存储完之后各数组的情况是这样的
next数组是这样存的:对于一条边 假如之前已经加入过与这条边同一起点的边 则储存最靠后的同起点边的编号 如果之前没有加入过任何与这条边同起点的边 则next数组的值为0
dis数组是存储的当前这条边的长度
to数组很好理解 它存储的就是你现在输入的这条边的末端点
head[i]代表第i个点为端点连接的最后一条边的编号
主要要点就这些
继续努力
来源:CSDN
作者:ars4me
链接:https://blog.csdn.net/qq_36303472/article/details/72510359