前向星是一种特殊的边集数组,相比较于邻接矩阵,大大地节省了存储空间。前向星可以说是近乎完美的。
如下图所示:
输入顺序为:
1 2
1 3
1 4
2 4
我们现在将会用链式前向星存储这个图。
首先建立一个结构体:
struct EDGE { int pre; int dis; int to; }edge[11]; int edge_sum,head[5];
pre代表与第i条边同起点的上一条边的存储位置。当该边为当前顶点的第一条边时,pre=0。
dis代表该边的权值,可以理解为长度。
to代表该边指向的顶点。
edge_sum代表边的总数,head代表该顶点的最后一条出边。
接下来是加边的函数。
void add_edge(int from,int to,int dis) { edge_sum++; edge[edge_sum].pre=head[from]; edge[edge_sum].dis=dis; edge[edge_sum].to=to; head[from]=edge_sum; }
模拟一遍。
edge[1].pre=0 edge[1].dis=1 edge[1].to=2 head[1]=1 (1->2)
edge[2].pre=0 edge[2].dis=1 edge[2].to=1 head[2]=2 (2->1)
edge[3].pre=1 edge[3].dis=1 edge[3].to=3 head[1]=3 (1->3)
edge[4].pre=0 edge[4].dis=1 edge[4].to=1 head[3]=4 (3->1)
edge[5].pre=3 edge[5].dis=1 edge[5].to=4 head[1]=5 (1->4)
edge[6].pre=0 edge[6].dis=1 edge[6].to=1 head[4]=6 (4->1)
edge[7].pre=2 edge[7].dis=1 edge[7].to=4 head[2]=7 (2->4)
edge[8].pre=6 edge[8].dis=1 edge[8].to=2 head[4]=2 (4->2)
来源:https://www.cnblogs.com/Mr-Kyle/p/12365378.html