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