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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现