DFS实现回路拓扑排序,每一次选一个顶点进行访问,先递归访问其相邻的所有顶点,然后再访问该顶点,便可实现拓扑排序,比如A->B,A->C, A->D, B->E访问A的时候先访问BCD,那么最后的顺序肯定是AB(递归)CD, B递归之后为BE,最终的顺序为ABECD
下面举一个具体的例子,见下图
算法从V1~V5依次进行,初始的时候栈中元素为空
1.u = 1,说明当前递归V1,V1的邻居为V5,先访问V5,然后再访问V1,栈中的元素的顺序为V5 V1
2.u = 2,说明当前递归V2,V2的邻居为V1,但是V1已经访问过,所以访问V2,栈中的元素为V2 V5 V1
3.u = 3,说明当前递归V3,V3的邻居为V2, V4,V2已经访问过,故先访问V4,再访问V3,栈中的元素为V3 V4 V2 V5 V1
4.u = 4,说明当前递归V4,但是V4已经访问过了,故忽略本次递归<