第六章学习小结

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

 

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(连通图)

 

 

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

posted @ 2020-06-14 20:43  江振宇  阅读(132)  评论(0编辑  收藏  举报