【图论】数组模拟邻接表存储(链式前向星)

图的邻接表存储法 又叫链式存储法 可以用数组模拟

定义


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个点为端点连接的最后一条边的编号

主要要点就这些
继续努力

posted @ 2017-05-18 21:21  ars4me  阅读(160)  评论(0编辑  收藏  举报