拓扑排序。不用推断是否有环,dfs挺简单的
代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> int map[105][105]; int visit[105]; int c[105]; int n,m,t; void dfs(int x) { visit[x] = 1; for(int i=1; i<=n; i++) { if(!visit[i]&&map[i][x]==1) { dfs(i); } } c[t++] = x; } int main() { int i,j,x,y; while(scanf("%d%d",&n,&m),m||n) { t = 1; memset(visit,0,sizeof(visit)); memset(map,0,sizeof(map)); for(i=1; i<=m; i++) { scanf("%d%d",&x,&y); map[x][y] = 1; } for(i=1; i<=n; i++) { if(!visit[i]) dfs(i); } for(i=1; i<=n; i++) { printf("%d",c[i]); if(i!=n) printf(" "); } puts(""); } return 0; }