上一篇介绍了基于入度的拓扑排序方法(上一篇链接点击打开链接)
下面介绍基于DFS的拓扑排序方法,核心思想是当当前的点被加入栈之前,要保证它的所有邻接顶点都已经加入到栈中了,这样栈中有顶自下的顺序就是入度从小到大的顺序。
图片如下:
图1:DAG
(图片来源于geeksforgeeks,代码参考geeksforgeeks)
废话不多说,直接上代码:
//基于 DFS的拓扑排序
#include<iostream>
#include<stack>
#include<list>
using namespace std;
class Graph{
private:
int V; //顶点数量
list<int> *adj; //邻接链表
//采用DFS的思想,根据递归过程,很容易看出入度为0的点是最后被加入到栈中的。
//因为只有该点的所有邻接点都加入