一、链式前向星
先理解一下前向星:
1.把每条边的起点按从小到大排序(如果起点一样则终点按从小到大排序)
2.记录一下以某个点为起点的边的数量和所有边在数组中的初始位置
一般这样定义:
len[i]为以i为起点的边的条数
head[i]为以i为起点的边在数组中存储的第一个位置
链式前向星(数组模拟链表)
前向星需要排序
链式前向星则不需要
链式前向星代码:
1.输入时存储
void add(int a,int b)
{
tot++;
to[tot]=b;
nxt[tot]=head[a];
head[a]=tot;
return;
}
2.遍历
for(int e=head[i]; e; e=nxt[e])
二、vector
vector的存图就相对简单了,但速度没有链式前向星快
vector<int> vc[MAXN];//定义
vc[a].push_back(c);//存图
for(int i=0;i<vc[u].size();++i)//遍历