#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 发布
本文介绍了一个使用 C 语言实现的程序,该程序读取成员之间的父子关系,并通过这些关系构建一个成员关系树。程序首先接收成员数量,然后逐一输入每个成员的子成员,最后输出没有父成员的成员编号,即树的根节点。
1318

被折叠的 条评论
为什么被折叠?



