图论之链式前向星

主宰稳场 提交于 2020-02-26 10:35:00

前向星是一种特殊的边集数组,相比较于邻接矩阵,大大地节省了存储空间。前向星可以说是近乎完美的。

如下图所示:

 

 

 

 输入顺序为:

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)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!