链式前向星
推荐博客 : 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的第一条起始边的位置.