首页 > 代码库 > 用邻接表或vector实现存边以及具体如何调用[模板]
用邻接表或vector实现存边以及具体如何调用[模板]
存边;
对于指针实现的邻接表:
struct edge{ int from,next,to,w;}E[maxn];int head[maxn],tot=0;//head初始化为-1;void add(int x,int y,int z){ E[++tot].from=x;//头结点 E[tot].to=y;//连接的下一个结点 E[tot].w=z;//边权值 E[tot].next=head[x];//连接指针 head[x]=tot;//指针指向tot,即可通过head[x]为下标,运用E}
对于vector:
#include <cstdio>#include <vector>struct edge{ int v,w; edge(int _v,int _w){ v=_v;w=_w; }};vector <edge> g[maxn];void add(int x,int y,int z){ g[x].push_back(edge(y,z));}
具体调用:
比如我们在spfa里需要找到u,连接的所有的边;
邻接表:
void use(int x){ int u=x;//x为头结点; for(int i=head[u];i!=-1;i=E[i].next){ v=E[i].to; } }
vector:
void use(int x){ int ans=g[x].size(); for(int i=0;i<ans;i++){ int v=g[x][i].v; } }
注意vector是从0开始存的;
总的来说还是vector比较好用,但是自己太弱> <,有时候不太会用stl,所以还是要小心~~
用邻接表或vector实现存边以及具体如何调用[模板]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。