模板:
加边:
struct node{int to,next,w;
}edge[1000];
int head[1000],cnt;
void add(int u,int v,int w)
{++cnt;edge[cnt].to = v;edge[cnt].next = head[u];edge[cnt].w = w;head[u] = cnt;
}
e[i].to是指第i条边的终点,e[i].next是指与第i条边同起点(即u)的下一条边的储存下标(0时退出),e[i].w即第i条边的权重,head[u]是指u为起点的存储下标。
遍历:(遍历以u为起点的边)
for(i=head[u];i;i=edge[i].next)
i开始为第一条边,每次指向下一条(以0为结束标志) (若下标从0开始,next应初始化-1)
假设输入1 2; 1 3; 1 5,即head一直更新,head[1] = 1;head [1] = 2;head[1] = 3,访问时其实是倒着访问的,先访问edge[3],然后i更新为edge[i].next即前一个head[1]即2,访问edge[2],再然后i更新为1,访问edge[1]。
推荐博客: