注意:
1、队列的使用。
//拓扑排序
vector<int> G[maxv];
int n,m,inDegree[maxv];
bool topologicalSort()
{
int num=0;
queue<int> q;
for(int i=0;i<n;i++) //将所有入度为0的点入队
{
if(inDegree[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];
inDegree[v]--; //u的邻接点入度减1
if(inDegree[v]==0)
{
q.push(v);
}
}
G[u].clear(); //可以不写
num++;
}
if(num==n) return true; //拓扑排序成功,是DAG图
else return false; //拓扑排序失败,不是DAG图
}