前向星建图方法

我的前向星建图方法是这样的:

边用结构体表示,然后把所有边都存在数组中。将顶点的各个信息放在各个数组中储存。

每个顶点有一个int类型的first数组,代表了与它相连的第一条边的编号。每条边的struct内有一个next,代表了下一条与当前处理节点相连的边的编号。

当要为节点a和b添加边时,做两次操作,每次操作先创建新边,把新边的next置为当前的first,然后将主节点的first更新成当前边的编号。

这样建图的优势:

  1. 比起vector来说,节省时间,并且复杂度也不高。
  2. 比起邻接表(也就是指针版本)来说,避免了繁琐的指针操作。
  3. 比起每次将新边挂在最后的版本来说,节省了end数组。(这个应该好想吧)
  4. 把边封装成结构体,不会显得很散乱。
  5. (至于对于邻接矩阵的优势。。应该不用我多说了吧。。)

劣势:

  1. 不直观(相对于指针版本来说)
  2. 不方便(相对vector版和邻接矩阵来说)

这种建图方式还是比较好码的,,下面贴上关键代码。

 1 const int maxn=205, maxe=40005;
 2 int n, cntedge; 
 3 int v[maxn], u[maxn], first[maxn], visit[maxn]; //关于节点的东西
 4 struct Edge{
 5     int to, w, next;
 6 };
 7 Edge edge[maxe]; //储存边
 8 
 9 void create_edge(int from, int to, int weight){ //造边
10     edge[++cntedge]=Edge{to, weight, first[from]};
11     first[from]=cntedge;
12     return;
13 }
14 
15 nowedge=first[nownode]; //遍历
16 while (nowedge){
17      ……
18      nowedge=edge[nowedge].next;
19 }
20   

 欢迎评论。。

转载于:https://www.cnblogs.com/MyNameIsPc/p/7412183.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值