描述
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。
给出每个人的孩子的信息。
输出一个序列,使得每个人的后辈都比那个人后列出。
输入
第1行一个整数N(1≤N≤100),表示家族的人数;
接下来N行,第i行描述第i个人的儿子;
每行最后是0表示描述完毕。
输出
输出一个序列,使得每个人的后辈都比那个人后列出;
如果有多解输出任意一解。
样例输入
5
0
4 5 1 0
1 0
5 3 0
3 0
样例输出
2 4 5 3 1
题目来源
#include<bits/stdc++.h> using namespace std; int vis[101][101]; int r[101]; //入度 ,被指向的顶点数量 int c[101]; //出度,指向的顶点数量 stack<int>v; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { int x; while(cin>>x,x) { c[i]++; //i的出度+1 vis[i][c[i]] = x; //存储和i相连的结点x r[x]++; //结点x的入度+1 } } for(int i=1;i<=n;i++) if(r[i]==0) v.push(i); //入度为0,入栈 int num = 0; do { int temp = v.top();v.pop(); num++; cout<<temp<<" "; for(int i=1;i<=c[temp];i++) //遍历和栈顶相连的点c[temp] { r[vis[temp][i]]--; //其他点的入度-1 if(r[vis[temp][i]]==0) v.push(vis[temp][i]); } }while(num!=n); return 0; }
标签:输出,vis,int,拓扑,入度,家谱,7690,101 From: https://www.cnblogs.com/jyssh/p/17362627.html