赤裸裸的拓扑排序。
#include <queue>
#include <vector>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,into[110];
vector <int> v[110];
void toposort(){
queue <int> q;
while(!q.empty()) q.pop();
for(int i=1; i<=n; i++)
if(!into[i]) q.push(i);
bool flag = false;
while(!q.empty()){
int t = q.front();
q.pop();
if(flag) cout << " ";
cout << t,flag = true;
for(int i=0; i<v[t].size(); i++){
into[v[t][i]]--;
if(!into[v[t][i]]) q.push(v[t][i]);
}
}
cout << endl;
}
int main(){
// freopen("in.txt", "r", stdin);
while(scanf("%d%d",&n,&m) == 2){
if(!n && !m) break;
for(int i=1; i<=n; i++) v[i].clear();
memset(into, 0, sizeof(into));
int a,b;
for(int i=0; i<m; i++){
cin >> a >> b;
v[a].push_back(b);
into[b]++;
}
toposort();
}
return 0;
}