266 字
1 分钟
树与图的存储
树与图的存储
树是一种特殊的图,与图的存储方式相同。 对于无向图中的边(a,b),存储两条有向边。 因此我们可以只考虑有向图的存储。
- 邻接矩阵
g[a][b]存储边 - 邻接表
// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx;// 另外可以使用栈把所有可开辟空间存储起来,然后每次 add 的时候就从栈顶取空间,删除则把空间加入栈中 一般来说只有大量删除的时候才使用栈式的空间开辟
// 添加一条边a->bvoid add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;}
// 初始化idx = 0;memset(h, -1, sizeof h);链式前向星的作用
i的反向边是i ^ 1- 有向图中 是表示第 条插入的边,无向图中 是第 条插入的边