hdu1285 拓扑序

 1 #include<stdio.h>
 2 #include<string.h>
 3 int map[505][505],into[505],w[505];
 4 int main()
 5 {
 6     int n,m,u,v,i,j,k;
 7     while (~scanf("%d%d",&n,&m))
 8     {
 9         memset(map,0,sizeof(map));
10         memset(into,0,sizeof(into));
11         for (i=1;i<=m;i++)
12         {
13             scanf("%d%d",&u,&v);
14             map[u][v]=1;
15         }
16         for (i=1;i<=n;i++)
17          for (j=1;j<=n;j++)
18          if (map[i][j]==1) into[j]++;
19         for (i=1;i<=n;i++)
20         {
21             for (j=1;j<=n;j++)
22             if (into[j]==0){
23                 w[i]=j;
24                 break;
25             }
26             into[j]=-1;
27             for (k=1;k<=n;k++)
28             if (map[j][k]==1) into[k]--;
29         }
30         for (i=1;i<n;i++) printf("%d ",w[i]);
31         printf("%d\n",w[n]);
32     }
33     return 0;
34 }

http://acm.hdu.edu.cn/showproblem.php?pid=1285

posted on 2014-07-16 16:02  xiao_xin  阅读(120)  评论(0)    收藏  举报

导航