链接 http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1459
#include<iostream> #include<stdio.h> #include<cstring> #include<algorithm> #include<vector> using namespace std; struct date { int v,next; }edge[212345]; int k,head[112345]; vector<int>v; bool vis[112345],vic[112345],vit[112345],fell; void add_edge( int u,int v ){ edge[k].v = v; edge[k].next = head[u]; head[u] = k++; } void DFS( int u ){ vit[u] = true; if( fell )return; for( int i = head[u]; i != -1; i = edge[i].next ) { if( vit[edge[i].v] ) { fell = true;return;} if( !vis[edge[i].v] ) DFS( edge[i].v ); } vit[u] = false; vis[u] = true; v.push_back( u ); } int main( ) { int N,M,U,V; while( scanf("%d%d",&N,&M) != EOF ) { k = 0; memset( head,-1,sizeof(head) ); memset( vic,0,sizeof(vic) ); for( int i = 1; i <= M; i++ ) { scanf("%d%d",&U,&V); add_edge( U,V ); vic[V] = true; } v.clear(); fell = false; memset( vis,0,sizeof(vis) ); memset( vit,0,sizeof(vit) ); for( int i = 1; i <= N; i++ ) if( !vic[i] && !fell ) DFS( i ); if( fell ){ printf("-1\n"); continue; } int len = v.size(); len--; printf("%d",v[len]);len--; for( int i = len; i >= 0; i-- ) printf(" %d",v[i]); puts(""); } return 0; }