问题1:书P309 介绍了拓扑序的概念(topplogical order)html
有向图没有环路,且有一条从A到B的边,则能够把顶点A安排在顶点B以前。这种排列获得的顶点次序成为拓扑序。git
问题1解决方案:算法
首先,了解一下拓扑排序的概念。网络
维基百科中:
在图论中,由一个有向无环图的顶点组成的序列,当且仅当知足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。
(1)每一个顶点出现且只出现一次;
(2)若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也能够定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得若是存在一条从顶点A到顶点B的路径,那么在排序中B出如今A的后面。数据结构
还有一个关于拓扑序的定义:
学习
对于拓扑排序,即找到起始点,即入度等于0 ,的状况下到 最终的点的检索过程,可是其中图中不能有环路,若是有环路的状况下,将会出现入度都相互相等的状况,这样就会有点没法输出。测试
存在一个新的名词,入度优化
以咱们书上的有向图为例:
D顶点入度为2,出度为1,度为3。spa
因此拓扑排序也能够用来检验有向图中那个是否有环.net
拓扑排序的做用
这里又要补充两个概念:偏序和全序
全序:集合内任何一对元素在在这个关系下都是相互可比较的。
好比:有限长度的序列按字典序是全序的。最多见的是单词在字典中是全序的。
偏序:有向图中两个顶点之间不存在环路,至于连通与否,是无所谓的。
全序:就是在偏序的基础之上,有向无环图中的任意一对顶点还须要有明确的关系(反映在图中,就是单向连通的关系,注意不能双向连通,那就成环了)。
意思就是讲,一个不肯定的偏序关系经全序后就有一种肯定的前后顺序了。
既然有前后,那么拓扑排序的应用
问题2:对于书P313 图15.7遍历理解问题。书上给出了广度优先遍历的步骤和结果,那么对于深度优先遍历的步骤结果是怎样的呢?
在以后,我又研究了一下深度遍历的代码,书上有这样一句重要的话我忽略了。
图的深度优先遍历和广度优先遍历的惟一不一样是,它使用的是栈而不是队列来管理遍历的。
因此,在一开始我就犯了一个错误,根据栈的性质——先进后出,那么应该是从顶点8开始向下遍历,而且一直到没有邻接顶点或者顶点已经被访问过。也就是说,若是是一个环路,那么他会从头遍历到尾,一直走到黑。
无错题,优秀!
图是数据结构中应用范围是较为普遍的,实现的方法也是多种多样。代码理解和实现的难度一样是有的。有些逻辑也较为复杂,须要潜心判断和思考。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | 610/610 | 1/2 | 20/30 | |
第三周 | 593/1230 | 1/3 | 18/48 | |
第四周 | 2011/3241 | 2/5 | 30/78 | |
第五周 | 956/4197 | 1/6 | 22/100 | |
第六周 | 2294/6491 | 2/8 | 20/120 | |
第七周 | 914/7405 | 1/9 | 20/140 | |
第八周 | 2366/9771 | 2/11 | 22/162 | |
第九周 | 1549/11320 | 1/12 | 22/184 |