queue<int>q; for(int i=0;i<n;i++) //n 节点的总数 if(in[i]==0) q.push(i); //将入度为0的点入队列 vector<int>ans; //ans 为拓扑序列 while(!q.empty()) { int p=q.top(); q.pop(); // 选一个入度为0的点,出队列 ans.push_back(p); for(int i=0;i<edge[p].size();i++) { int y=edge[p][i]; in[y]--; if(in[y]==0) q.push(y); } } if(ans.size()==n) { for(int i=0;i<ans.size();i++) printf( "%d ",ans[i] ); printf(" "); } else printf("No Answer! "); // ans 中的长度与n不相等,就说明无拓扑序列