#include <set>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 110;
int main(){
int n;
vector<int> adj[MAXN]; //邻接矩阵
int indegree[MAXN]; //入度数组
cin >> n;
//初始化
for(int i = 1; i<= n; i++){
adj[i].clear();
indegree[i] = 0;
}
//处理输入
for(int i=1; i<=n; i++){
int x;
while(cin>>x){
if(x == 0){
break;
}
adj[i].push_back(x);
indegree[x]++;
}
}
queue<int> qu;
for(int i=1; i<=n; i++){
if(indegree[i]==0){
qu.push(i);
}
}
vector<int> res;
//题目保证一定有解
while(!qu.empty()){
int vertex = qu.front();
res.push_back(vertex);
qu.pop();
for(int i=0; i<adj[vertex].size(); i++){
int temp = adj[vertex][i];
indegree[temp]--;
if(indegree[temp] == 0)
qu.push(temp);
}
}
for(int i = 0; i < res.size(); i++){
cout<<res[i] <<" ";
}
return 0;
}
拓扑排序模板
最新推荐文章于 2022-02-21 20:08:01 发布