首页 > 其他 > 详细

存图方式---邻接表&邻接矩阵

时间:2018-04-06 23:04:22      阅读:224      评论:0      收藏:0      [点我收藏+]

基于vector存图

 1 struct Edge
 2 {
 3     int u, v, w;
 4     Edge(){}
 5     Edge(int u, int v, int w):u(u), v(v), w(w){}
 6 };
 7 vector<Edge>edges;//把每一条边存下来
 8 vector<int>Map[maxn];//G[i]这个vector存的是以i为起点的所有边在edges里面的下标
 9 void init(int n)
10 {
11     for(int i = 0; i <= n; i++)Map[i].clear();
12     edges.clear();
13 }
14 void addedge(int u, int v, int w)
15 {
16     edges.push_back(Edge(u, v, w));//注意无向图需要存两条边
17     m = edges.size();
18     Map[u].push_back(m - 1);
19 }
20 void Find(int u)//遍历以u为起点的所有边
21 {
22     for(int i = 0; i < Map[u].size(); i++)
23     {
24         Edge&e = edges[Map[u][i]];
25         //使用e就可以遍历以u为起点的所有的边
26     }
27 }

用邻接矩阵的代码比较简单,就不加上来了

使用链表存图

https://www.cnblogs.com/ECJTUACM-873284962/p/6905416.html

 1 struct edge
 2 {
 3     int next;//指向下一个节点
 4     int u, v, w;
 5 };
 6 edge a[maxn];
 7 int head[maxn], node;//node记录节点的数目,head[i]记录连接着i的第一条边
 8 void add(int u, int v, int w)
 9 {
10     a[node].u = u;
11     a[node].v = v;
12     a[node].w = w;
13     a[node].next = head[u];
14     head[u] = node++;
15 }
16 void init()
17 {
18     node = 0;
19     memset(head, -1, sizeof(head));
20 }
21 void Find(int u)
22 {
23     for(int i = head[u]; i != -1; i = a[i].next)
24     {
25         edge& e = a[i];
26         //e就是连接着u的所有边
27     }
28 }

 

存图方式---邻接表&邻接矩阵

原文:https://www.cnblogs.com/fzl194/p/8729203.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!