基本原理
邻接表为每个节点各维护一个链表,它们存储了每个节点的相邻节点,其中心是“点”。显而易见,这种方式空间和时间难以兼得。
边表是用一个数组存储了所有“边”,外加first数组,可以依次遍历以某个点为起点的所有边。
代码实现
这是钟皓曦大佬的代码:
struct edge
{
int e,next; // e:end
}ed[maxm];
int en,first[maxn]; // en: edge number,边数
// first: 记录每个点的第一条边
// 添加边
void add_edge(int s, int e) // s:start; e:end
{
en++; //边数加1
ed[en].next = first[s];//将当前边的下一条边指向以前的首边
ed