链式前向星存图
链式前向星的主要思路就是用结构体和head去联动存储一个图
head表示边的编号
struct中存储图的终点,边权, 还有下一个同起点的边的编号
long long head[1000086], tot, u, v, w;
struct edge{
long long to, cnt, nt;
};
void add(ll u, ll v, ll w){
tot++;
e[tot].nt = head[u];//注意函数里面的这一行和下面的最后一行位置不可以互换
e[tot].to = v;
e[tot].dis = w;
head[u] = tot;//这个是让它的头节点指向当前的边的编号
//如果写反则它将会自己指向自己然后丢失
}
对于一个链式前向星,我们采用函数的形式去进行存储
for(ll i=1;i<=n;++i){
u = read(), v = read(), w = read();
add(u, v, w);
// add(v, u, w);
}
这是在主函数中去进行的(read是快读以二进制形式优化读入)
如果需要存储一个无向图,则将输入的起点和终点相互交换再进行读入
最后是对于存储后的使用
for(int i=1;i<=n;++i){
for(int j=head[i];j;j=e[i].nt){
cout<<i<<" ->"<<e[i].to<<" dis: "<<e[i].dis<<endl;
}
}