//31MS 332K
#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX_N = 500 + 5;
vector<int> G[MAX_N];
int in_d[MAX_N];
int c[MAX_N];
//bool vis[MAX_N];
int N, num;
bool topo_sort(){
num = 0;
int i;
for(i=1; i<=N; i++){
bool flag = false;
for(int u=1; u<=N; u++){
if(in_d[u] == 0){
flag = true;
c[++num] = u;
in_d[u]--;
for(int j=0; j<G[u].size(); j++){
int& v = G[u][j];
in_d[v]--;
}
break;
}
}
if(!flag) break;
}
if(i == N+1) return true;
else return false;
}
int main(){
int M;
while(~scanf("%d%d", &N, &M)){
int u, v;
memset(in_d, 0, sizeof(in_d));
for(int i=1; i<=M; i++){
scanf("%d%d", &u, &v);
G[u].push_back(v);
in_d[v]++;
}
topo_sort();
for(int i=1; i<=num-1; i++){
printf("%d ", c[i]);
}
printf("%d\n", c[num]);
for(int i=1; i<=N; i++) G[i].clear();
}
return 0;
}
hdu 1285 确定比赛名次 拓扑排序
最新推荐文章于 2022-03-29 17:09:40 发布