#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define siz 1000005
vector <int> vec[siz];
vector <int> ans;
bool color[siz];
int node,edge;
void dfs(int n){
color[n]=true;
for(int i=0;i<vec[n].size();i++){
int v=vec[n][i];
if(!color[v]){
dfs(v);
}
}
ans.push_back(n);
}
void reset(){
for(int i=0;i<=node;i++){
color[i]=false;
vec[i].clear();
}
}
int main()
{
int u,v;
freopen("input.txt","r",stdin);
while(scanf("%d%d",&node,&edge)==2){
reset();
for(int i=0;i<edge;i++){
scanf("%d%d",&u,&v);
vec[u].push_back(v);
}
for(int i=1;i<=node;i++){
if(!color[i]){
dfs(i);
}
}
reverse(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++){
if(i) printf(" ");
printf("%d",ans[i]);
}
}
return 0;
}
Wednesday, October 31, 2012
Topological Sort
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment