图的深度优先遍历算法
更正一下前面一篇博文中的不妥之处:前面一篇博文有非无向图而不可广度优先遍历之嫌。其实广度优先搜索也是可以用在有向图中的,因为无向图是特殊的有向图,而这里广度优先遍历为的是遍历连通图的所有节点,对于有向图来说只要存在一条有向边,那么两个节点就是“连接”的状态,那么遍历就可以缠绕在这条边上。
深度优先遍历,也就是尽量深的遍历图的节点,同样用到了三色标记,用到了递归函数,这里还有一个盖时间戳的操作。当发现某个节点时记录一下时间,当完成一个节点的遍历时记录一下时间,这样依据时间戳,可以发现很多性质和应用。
其实在很多地方广度优先搜索和深度优先搜索代码实现起来都有特点:广度优先搜索使用一个queue来组织循环,而深度优先搜索则是使用递归函数来实现“深度”优先。深度优先遍历的第一个应用是拓扑排序: