如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(Directed Acyclic Graph,DAG)。
拓扑排序一个很重要的应用就是判断一个给定图是否是有向无环图。
vector<int> G[MAXV];//邻接表
int n,m,inDegree[MAXV];//顶点数,入度
//拓扑排序
bool topologicalSort(){
int num = 0;//记录加入拓扑序列的顶点数
queue<int> q;
for(int i=0;i<n;i++){
if(inDegree[i] == 0){
q.push(i);
}
}
while(!q.empty()){
int u=q.front();//取队首顶点u
//printf("%d",u); //此处可输出顶点u,作为拓扑序列中的顶点
q.pop();
for(int i=0;i<G[u].size();i++){
int v = G[u][i];
inDegree[v]--;
if(inDegree[v] == 0){
q.push(v);
}
}
G[u].clear();
num++;
}
if(num==n)
return true;
else
return false;
}