它的基本思想是深度优先搜索正好会只访问每个顶点一次。如果将dfs()的参数顶点保存在一个数据结构中,遍历这个数据结构实际上就能访问图中的所有顶点,遍历的顺序取决于这个数据结构的性质以及是在递归之前还是之后进行保存。在典型的应用中,主要有三种排序顺序:
前序 :在递归调用之前将顶点加入队列
后序:在递归调用之后将顶点加入队列
逆后序:在递归调用之后将顶点压入栈
API:
public class DepthFirstOrder
DepthFirstOrder(Digraph G) //使用深度优先遍历来保存各个顶点的先序,后序,逆后序
Iterable pre() //获取先序结构
Iterable post() //获取后序结构
Iterable reversePost() //获取逆后序结构
具体实现如下:
public class DepthFirstOrder {
private Queue<Integer> pre; //所有顶点的前序排序
private Queue<Integer> post; //所有顶点的后序排序