图的第二部分接着上一篇。。
图的遍历这部分分成了三个知识点,DFS.BFS,图的拓扑排序,图的欧拉路径、欧拉回路
按照我的理解顺序来写的。
拓扑排序是对有向无圈图(DAG)顶点的一种排序,它使得如果存在u,v的有向路径,那么满足序中u在v前。拓扑排序就是由一种偏序(partical order)得到一个全序(称为拓扑有序(topological order))。偏序是满足自反性,反对称性,传递性的序。
看着很复杂吧。按照我的理解来说,就是图中的闯关游戏一样。你要解锁这个点,就要先把一直与这个点以前相连的点删去。 通俗一点说,就是boss要一个个打。。先很容易消灭那些没有部下的boss,然后让他上面的boss也失去了跟他一样的小boss,然后我们一步一步的打,就能解决所有的boss 从百度百科上偷一张图。。 基本的算法实现:1. 把所有入度=0的点入队Q。
2. 若队Q非空,则点u出队,输出u;否则转4。
3. 把所有与点u相关的边(u,v)删除,若此过程中有点v的入度变为0,则把v入队Q,转2。
4. 若出队点数<N,则有圈;否则输出结果。
算法复杂度: O(m)。
运用到队列的知识
DFS在我看来,是一种很优雅的暴力。在搜索的过程中一旦遇到一个未标记的顶点,就沿着这个顶点继续搜索,直至遍历完所有可达的顶点。DFS具有回溯的性质,也应用了记忆化搜索的感觉。由此形成的搜索树很瘦很高。执行DFS时,同时会维护一个时间戳,以此记录每个顶点被搜索到的顺序。
BFS则相反,遇到一个未搜索的顶点时,先将与该顶点邻接的搜索完,然后进入下一轮搜索。与源点距离为k+1的顶点总是在所有与源点距离小于等于k的所有顶点都搜索完之后才被遍历。
DFS与BFS在应用中各有不足,BFS在对于不区分边权值的图,BFS能计算出最短路径——DFS对此无能为力。
而DFS在形成的搜索树包含不同类型的边(树边,回边,下边以及交叉边),边的性质能通过时间戳识别出来。
在应用的时候需要注意
