学习图论时不会写数据结构,看题解邻接表也不太懂,现在懂一点了,赶紧记一下
// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点
int h[N], e[N], ne[N], idx;
//初始 ,相当于每个链表表头都指向-1,即指向空节点
// 添加一条边a->b
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
//第idx条边指向b,且它指向h[a](第一次是-1,之后是上一个插入的节点),head现在指向刚更新的节点,不是空链表了
}
// 初始化
idx = 0;
memset(h, -1, sizeof h);
遍历
for (int i = h[u]; i != -1; i = ne[i])
{
}