poj2367--Genealogical tree(拓扑排序)
根据题意构图,简单的拓扑排序,输出排序的结果
View Code
1 //Accepted 4308K 47MS G++ 2 #include "stdio.h" 3 #include "string.h" 4 #define M 1000 5 int g[M][M]; 6 int q[M],p[M]; 7 bool useif[M]; 8 int top=0,n,m; 9 void topo() 10 { 11 int i; 12 bool use = false; 13 top=0; 14 memset(useif,0,sizeof(useif)); 15 for (i=1;i<=n;i++) 16 { 17 if(q[i] == 0) 18 { 19 useif[i] = true; 20 p[top++] = i; 21 } 22 } 23 while( top > 0) 24 { 25 int x = p[--top]; 26 printf("%d ",x); 27 for(i=1;i<=n;i++) 28 { 29 if(!useif[i] && g[x][i]==1) 30 { 31 q[i]--; 32 if(q[i] == 0) 33 { 34 useif[i] = true; 35 p[top++] = i; 36 // break; 37 } 38 39 } 40 } 41 } 42 } 43 int main() 44 { 45 int i; 46 while(scanf("%d",&n)!=EOF) 47 { 48 memset(g,0,sizeof(g)); 49 memset(q,0,sizeof(q)); 50 memset(p,0,sizeof(p)); 51 for(i=1;i<=n;i++) 52 { 53 while(scanf("%d",&m)==1 && m) 54 { 55 g[i][m] = 1; 56 q[m]++; 57 } 58 } 59 topo(); 60 } 61 return 0; 62 }


浙公网安备 33010602011771号