TZOJ 7690: 家谱树 拓扑排序

描述

 

有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。

给出每个人的孩子的信息。

输出一个序列,使得每个人的后辈都比那个人后列出。

 

输入

 

第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
复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int vis[101][101];
 4 int r[101]; //入度 ,被指向的顶点数量 
 5 int c[101]; //出度,指向的顶点数量 
 6 stack<int>v;
 7 int main()
 8 {
 9     int n;
10     cin>>n;
11     for(int i=1;i<=n;i++)
12     {
13         int x;
14         while(cin>>x,x)
15         {
16             c[i]++; //i的出度+1
17             vis[i][c[i]] = x; //存储和i相连的结点x
18             r[x]++; //结点x的入度+1 
19         }
20     }
21     for(int i=1;i<=n;i++)
22         if(r[i]==0)
23             v.push(i); //入度为0,入栈
24     int num = 0;
25     do
26     {
27         int temp = v.top();v.pop();
28         num++;
29         cout<<temp<<" ";
30         for(int i=1;i<=c[temp];i++) //遍历和栈顶相连的点c[temp]
31         {
32             r[vis[temp][i]]--; //其他点的入度-1
33             if(r[vis[temp][i]]==0)
34                 v.push(vis[temp][i]); 
35         } 
36     }while(num!=n); 
37      return 0;
38 }
复制代码

 

posted @   CRt0729  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示