存图方式---邻接表&邻接矩阵&前向星

本文详细介绍了两种常用的图存储结构:基于vector的存储方法和链表前向星存储方法。通过具体的C++代码实现展示了如何添加边、初始化图以及遍历以某个顶点为起点的所有边。适用于需要理解和实现图算法的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值