• 第六章学习小结


    第六章主要进行有关图的学习,这一章学得东西很多,涉及图的方方面面包括如何定义存储结构,如何初始化,如何建立一张图,如何进行图的操作等等。

    6-1

    主要学习了图的基本知识,不带权图包括有向图,无向图,带权图包括有向网络,无向网络。在求度的时候要注意无向图和有向图的区别,有向图包括入度和出度。

    连通分量=>最大连通子图(无向图)   

    6-4

    存储方式的定义,主要学习了邻接矩阵和邻接表两种定义方式。邻接矩阵的话采用的是二维数组的方式,在图中有边为0,无边为1,在网络中,有边则存储边的权值,无边为INT_MAX

    邻接表的话用了局部链表的方式,主图包括了数据域和指针域,数据域为顶点值,指针域为右边的顶点组成的链表集合  (邻接矩阵和邻接表具体的定义这里没有给出)

    6-5

    这一小节介绍了图的遍历的相关知识点,BMS和DMS(广度优先搜索、深度优先搜索),DMS类似于树的先序遍历采用递归的方法, BMS类似于树的层次遍历,要用到辅助的数据结构队列。

    对于连通图来说,DMS和BMS执行一次就可以得到正确的遍历结果,如果是非联通图的话,则要在此之上嵌套一层for循环对每个顶点都进行一次DMS和BMS,其中用辅助数组

    checked[]来记录该顶点是否被访问过

    for(.........){
        if(checked[i)  continue;
        else   DMS()/BMS()
    }
     6-6

    这小节介绍了图的应用包括最小生成树、最短路径拓扑排序。最小生成树介绍了普里姆算法和克鲁斯卡尔算法。

    下面是普里姆算法:总体的过程涉及选择和刷新两个过程

    clossdge a/0 b/1 c/2 d/3 e/4
    Adjvex   a   a  
    Lowcost 0 12 INT_MAX 13 INT_MAX
    clossdge a/0 b/1 c/2 d/3 e/4
    Adjvex   a b a  
    Lowcost 0 0 15 13 INT_MAX

    知道 Lowcost全部结束的话就可以生成最小生成树了。

    下面是克鲁斯卡尔算法:

    采用Edge[]和 vexset[]两个辅助数组,前者储存边的2个顶点和权值,后者存储对应所在的连通分量

    最短路径:

    S 1 0 0 0
    D INT_MAX 12 13 INT_MAX
    Path -1 0 0 -1

    S表示该顶点是否更新过最短路径

    D表示的是对应每条边的最短路径

    Path对应的在边最短的情况下与之相连的顶点下标

    更新的时候找出所有路径最短的那一个对D、S、Path进行更新,直到s所有的元素都为1(连通图)

    在做作业的时候知识点比较多,最近记性不怎么好,所以回盘的时间比较多,效率相对来说有点低。实践题一开始觉得应该挺好做的,但是做的时候又有些问题,数组没有初始化呀,距离公式写错了等一系列问题。后续学习上课还要集中精力,认真学习。

  • 相关阅读:
    Windbg DUMP
    NET媒体文件操作组件TagLib
    NET Framework、.NET Core、Xamarin
    面向切面编程
    微服务
    NET Core
    Yeoman generator
    Service Fabric
    Vue.JS 2.x
    CoreCLR
  • 原文地址:https://www.cnblogs.com/jintao1990/p/13122523.html
Copyright © 2020-2023  润新知