#include <stdio.h>
#define MAX 101
int numOfMembers;
int relation[MAX][MAX];//relation[parent][child]
int stack[MAX];
int top;
int flagOfInStack[MAX];
void toFindChild(int parent){
if (flagOfInStack[parent] == 1)
return;
int member;
for (member = 1; member <= numOfMembers; member++)
if (relation[parent][member] == 1)
toFindChild(member);
top++;
stack[top] = parent;
flagOfInStack[parent] = 1;
}
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;
relation[parent][child] = 1;
}
}
for (member = 1; member <= numOfMembers; member++)
toFindChild(member);
while (top){
printf("%d%c", stack[top], top == 1 ? '\n' : ' ');
top--;
}
return 0;
}
URAL 1022 Genealogical Tree (DFS)
最新推荐文章于 2018-09-08 16:51:11 发布