#include<stdio.h>
#define MAX 101
int numOfMembers;
int childStack[MAX][MAX];
int top[MAX];
int numOfParentsArray[MAX];
int main(){
scanf("%d", &numOfMembers);
int member;
for (member = 1; member <= numOfMembers; member++){
int parent = member;
while (1){
int child;
scanf("%d", &child);
if (child == 0)
break;
top[parent]++;
childStack[parent][ top[parent] ] = child;
numOfParentsArray[child]++;
}
}
int numOfAccessorsFound;
for (numOfAccessorsFound = 1; numOfAccessorsFound <= numOfMembers; numOfAccessorsFound++){
int memberNoParent = 0;
for (member = 1; member <= numOfMembers; member++){
if (numOfParentsArray[member] == 0){
numOfParentsArray[member] = -1;
memberNoParent = member;
break;
}
}
printf("%d", memberNoParent);
if (numOfAccessorsFound == numOfMembers)
return 0;
else
printf(" ");
int childTop = top[memberNoParent];
int indexOfChild;
for (indexOfChild = 1; indexOfChild <= childTop; indexOfChild++){
int child = childStack[memberNoParent][indexOfChild];
numOfParentsArray[child]--;
}
}
}
URAL 1022 Genealogical Tree (拓扑排序)
最新推荐文章于 2016-12-03 01:26:19 发布