• 前向星建图方法


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

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

    每个顶点有一个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   

     欢迎评论。。

  • 相关阅读:
    语音信号端点检测
    WEBPACK & BABEL 打包项目
    使用 Qt 获取 UDP 数据并显示成图片(2)
    QSS为Qt程序添加不一样的样式
    window 搜索大文件
    Idea java 编译发生 cannot find symbol
    JetBeans Tab键相关设置
    JetBean Rider 重命名 c# 程序集名
    Unity 导入其他工程
    列出当前文件夹下的以log结尾的文件名
  • 原文地址:https://www.cnblogs.com/MyNameIsPc/p/7412183.html
Copyright © 2020-2023  润新知