确定比赛名次
http://acm.hdu.edu.cn/showproblem.php?pid=1285
拓扑排序:次序问题
AOV网:
用顶点表示活动,弧表示活动间的优先关系的有向图,AOV网中不应该出现有向环:
如果存在环,则某项活动以自己为先决条件。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int n,m; 5 int map[501][501],d[501],v[501]; 6 int main() 7 { 8 int x,y; 9 int flag; 10 while(scanf("%d%d",&n,&m)!=EOF) 11 { 12 memset(v,0,sizeof(v)); 13 memset(d,0,sizeof(d)); 14 memset(map,0,sizeof(map)); 15 while(m--) 16 { 17 scanf("%d%d",&x,&y); 18 if(!map[x][y]) 19 { 20 map[x][y]=1; 21 d[y]++; 22 } 23 } 24 flag=0; 25 for(int i=1;i<=n;i++) 26 { 27 for(int j=1;j<=n;j++) 28 { 29 if(v[j]==0&&d[j]==0) 30 { 31 for(int k=1;k<=n;k++) 32 if(map[j][k]) 33 d[k]--; 34 v[j]=1; 35 if(flag==0) 36 { 37 printf("%d",j); 38 flag=1; 39 } 40 else printf(" %d",j); 41 break; 42 } 43 } 44 } 45 printf("\n"); 46 47 } 48 return 0; 49 }