标签:
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1285
Description
Input
Output
Sample Input
4 3 1 2 2 3 4 3
Sample Output
1 2 4 3
拓扑排序
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stack> 6 #include<math.h> 7 #include<queue> 8 #include<map> 9 using namespace std; 10 int ans[510][510];//记录两人是否进行了比赛 11 int n,indegree[510];//记录前驱个数 12 int q[510];//保存拓扑 13 void tuopu() 14 { 15 int i,j,top,k=0; 16 for(j=0; j<n; j++) 17 { 18 for(i=1; i<=n; i++) 19 { 20 if(indegree[i] == 0)///前驱为零即是当前第一名 21 { 22 top = i; 23 break; 24 } 25 } 26 q[k++] = top; 27 indegree[top] = -1; 28 for(i=1; i<=n; i++) 29 { 30 if(ans[top][i]) 31 indegree[i]--;///将前驱中含有当前第一名的前去数量减一 32 } 33 34 35 } 36 for(i=0; i<k-1; i++) 37 printf("%d ",q[i]); 38 printf("%d\n",q[n-1]); 39 } 40 int main() 41 { 42 int i,a,b,m; 43 while(scanf("%d%d",&n,&m)!=EOF) 44 { 45 memset(indegree,0,sizeof(indegree)); 46 memset(ans,0,sizeof(ans)); 47 48 for(i=0; i<m; i++) 49 { 50 scanf("%d%d",&a,&b); 51 if(ans[a][b] == 0) 52 { 53 ans[a][b] = 1; 54 indegree[b]++; 55 } 56 } 57 tuopu(); 58 } 59 }
标签:
原文地址:http://www.cnblogs.com/biu-biu-biu-/p/5799808.html