拓扑排序水题
#include<stdio.h> #include<string.h> int map[502][502],n,m,ans[502],link[502]; void tuopusort() { int i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(map[i][j]==1) link[j]++; for(i=1;i<=n;i++) { j=1; while(link[j]!=0)j++; ans[i]=j; link[j]--; for(int k=1;k<=n;k++) if(map[j][k]==1) link[k]--; } } int main() { int i,a,b; while(scanf("%d%d",&n,&m)!=EOF) { memset(link,0,sizeof(link)); memset(map,0,sizeof(map)); for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); map[a][b]=1; } tuopusort(); for(i=1;i<n;i++) printf("%d ",ans[i]); printf("%d\n",ans[n]); } return 0; }