首页 > 代码库 > 我的软考之路(五)——数据结构与算法(3)之图
我的软考之路(五)——数据结构与算法(3)之图
图跟树一样,也是非线性结构。咋看起来有点复杂。事实上它非常easy。树具有层次关系,上层元素能够与下一个多个元素连接。可是仅仅能和上层的一个元素连接。在图结构中,节点间的连接是随意的,不论什么一个元素都能够与其它元素连接。
图相对而言非常easy,我们仅仅介绍的图的遍历和最小生成树。如今我们開始。
遍历
1.概念
从图中某一个顶点出发,訪问图中的每个结点,并要求仅仅能訪问一次,不能反复訪问。
2.方法
(1)广度优先遍历
基本思想:首先訪问顶点。再訪问顶点的所有未訪问的邻结点,再訪问邻结点的所有结点就可以(类似树的层次遍历)。
广度优先遍历:V1,V2,V3,V4。V5,V6或V1。V4。V3,V2,V6,V5
(2)深度优先遍历
基本思想:首先訪问顶点,再訪问顶点的每一个邻结点,从该点继续深度优先遍历(类似于树的前序遍历)
深度优先遍历:V1,V2,V5,V3,V6,V4或V1,V4。V6。V3,V5,V2
总结。图的广度优先遍历和深度优先遍历的结果并不唯一。
最小生成树
(1)普里姆(Prim)算法
基本思想:选一个顶点開始。查找与顶点相邻且代价(边值)最小的边的还有一个顶点,直到最后。
比如:V1作为顶点,V1->V3->V6->V4,V3->V2->V5,连接图中全部的结点就可以。
(2)克鲁斯卡尔(Kruskal)算法
基本思想:选择图中最小的边,直到全部结点都连通。
比如:第一小边:V1->V3,第二小边:V4->V6。第三小边:V2-V5。第四小边:V3->V6,第五小边:V3->V2,此时全部的结点都连到了一起。
(3)算法对照
普里姆算法更加注重的是结点,点与点之间距离最短的优先;克鲁斯卡尔算法更加注重的是边,将边排序,最小边排在前面。最大边排在后面。
总结
因为图的内容相对要简单,所以我们解说的内容相对而言要少。就当是精益求精吧。后面的排序和算法才是我们的重点。后面的博文立即杀到。
兴许博客的更新列表,敬请期待。
我的软考之路(一)——开篇(已更新)
我的软考之路(二)——J2SE宏观总结(已更新)
我的软考之路(三)——数据结构与算法(1)之线性表(已更新)
我的软考之路(四)——数据结构与算法(2)之树与二叉树(已更新)
我的软考之路(五)——数据结构与算法(3)之图(已更新)
我的软考之路(六)——数据结构与算法(4)之八大排序(已更新)
我的软考之路(七)——数据结构与算法(5)之查找(已更新)
我的软考之路(五)——数据结构与算法(3)之图