链式前向星

推荐博客 : http://blog.csdn.net/ZHangFFYY/article/details/77871897

我们对一个图的存储基本有两种,邻近矩阵和邻接表 ,在补充一个链式前向星

用此方法存图 , 首先先定义一个结构体数组

struct node

{  

  int to, w; // to 表示当前点所指向的下一个点

  int next; // next 表示的是当前点所连得下一个点(或者可以说是前一个点)

};

除此之外,还有一个数组 head[ ], 表示以 i 为起始点的第一条边所在的是结构体中的哪个点,(其实就是最后输入的那个边号)通常我们上来将其初始化为 -1

加边的函数这样写 :

void add(int u, int v, int w){
    edge[cnt].to = v;
    edge[cnt].w = w;
    edge[next] = head[u];
    head[u] = cnt++;
}

初始化cnt = 0,这样,现在我们还是按照上面的图和输入来模拟一下:


edge[0].to = 2;     edge[0].next = -1;      head[1] = 0;

edge[1].to = 3;     edge[1].next = -1;      head[2] = 1;

edge[2].to = 4;     edge[2],next = -1;      head[3] = 2;

edge[3].to = 3;     edge[3].next = 0;       head[1] = 3;

edge[4].to = 1;     edge[4].next = -1;      head[4] = 4;

edge[5].to = 5;     edge[5].next = 3;       head[1] = 5;

edge[6].to = 5;     edge[6].next = 4;       head[4] = 6;


很明显,head[i]保存的是以i为起点的所有边中编号最大的那个,而把这个当作顶点i的第一条起始边的位置.

东北日出西边雨 道是无情却有情
原文地址:https://www.cnblogs.com/ccut-ry/p/8472153.html