链式前向星

在存图的时候,如果用二维矩阵存图容易爆内存,做算法题一般会使用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)权重
}

 

 

  

 

posted @ 2019-12-06 17:37  时侍  阅读(158)  评论(0)    收藏  举报