链式前向星
在存图的时候,如果用二维矩阵存图容易爆内存,做算法题一般会使用vector<int> v[maxn]或者链式前向星。使用vector很容易理解,这里记录一下链式前向星的写法。
首先一个head数组为每个结点的头部,并且设置一个计数器(用处下文解释)
int head[maxn]; int cnt;
定义一个结构体表示边
struct { int to; //下一个结点 int weight; //边的权重 int next; //下一条边 }edge; edge[maxn];
到此,我们准备工作就做完了,下面加入一条边
inline void add(int u,int v,int w){ edge[++cnt].to=v; edge[cnt].weight=w; edge[cnt].next=head[u]; head[u]=cnt; }
cnt作用此处明晰了,可以理解为编号。
遍历连接u的所有边
for(int i=head[u]; i; i=edge[i].next){ cout<<edge[i].to<<' '; //和U连接的点 cout<<edge[i].weight<<endl; //边(u,v)权重 }

浙公网安备 33010602011771号