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) // 如果顶点i的入度为 0 入队
q.push(i);
}
while(!q.empty()){
int u = q.front();
printf("%d", u);
q.pop();
for(int i = 0; i < G[u].size(); i++){
int v = G[u][i]; //u的后继结点v
inDegree[v]--; //顶点v的入度-1
if(inDegree[v] == 0){ //如果顶点v的入度为 0 入队
q.push(v);
}
}
G[u].clear(); //清空定顶点u的所有出边
num++; //加入拓扑序列的定点数+1
}
if(num == n) return true; //拓扑序列的顶点数为n,说明拓扑排序成功
else return false; //加入拓扑序列的顶点数小于n,说明失败
}