当前位置: 首页 > news >正文

洛谷 B3644:【模板】拓扑排序 / 家谱树 ← 邻接表

【题目来源】
https://www.luogu.com.cn/problem/B3644

【题目描述】
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列,使得每个人的后辈都比那个人后列出。

【输入格式】
第 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

【算法分析】
● 拓扑排序算法概念
拓扑排序‌是针对‌有向无环图(DAG, Directed Acyclic Graph)‌的一种线性排序算法,使得对于图中的每一条有向边 (u, v),u 在排序中总是位于 v 的前面。
有向图的拓扑序列详见:https://blog.csdn.net/hnjzsyjyj/article/details/116307687

● 拓扑排序算法步骤
(1)从有向图中选择一个无前驱(即入度为0)的顶点并且输出它。
(2)从图中删除该顶点及所有以它为尾的有向边。
(3)重复上述两步,直至不存在无前驱的顶点。
(4)若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在环,否则输出的顶点序列就是一个拓扑序列。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int maxn=1e3+5;
int ind[maxn]; //inDegree
vector<int> g[maxn];
int n,x;void topsort() {queue<int> q;for(int i=1; i<=n; i++) {if(ind[i]==0) q.push(i);}while(!q.empty()) {int t=q.front();q.pop();cout<<t<<" ";for(int i=0; i<g[t].size(); i++) {int j=g[t][i];ind[j]--;if(ind[j]==0) q.push(j);}}
}int main() {cin>>n;for(int i=1; i<=n; i++) {while(cin>>x && x) {g[i].push_back(x);ind[x]++;}}topsort();return 0;
}/*
in:
5
0
4 5 1 0
1 0
5 3 0
3 0out:
2 4 5 3 1
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/116307687
https://www.cnblogs.com/jyssh/p/18829420
https://www.luogu.com.cn/problem/solution/B3644
https://www.acwing.com/problem/content/3707/
https://www.lanqiao.cn/problems/108/learning/

 

相关文章:

  • elementui里的el-tabs的内置样式修改失效?
  • LeetCode - 02.02.返回倒数第 k 个节点
  • 自定义指令input中前面不能输入空格
  • WPF TextBlock控件性能优化指南
  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • Docker容器资源控制--CGroup
  • 强化学习之基于无模型的算法之时序差分法
  • Python 数据智能实战 (2):LLM 工具箱搭建 - API/库实操与高效 Prompt 设计入门
  • react-新建项目复用node_modules
  • uni-app - 微信小程序中,使用 navigateTo 传递非常大的数字传参精度丢失的问题
  • 1.6 点云数据获取方式——单目相机多视图几何
  • SpringBoot获取用户信息常见问题(密码屏蔽、驼峰命名和下划线命名的自动转换)
  • 每日算法-250429
  • selenium IDE脚本如何转换为可运行的selenium webdriver java程序
  • leetcode 21. 合并两个有序链表(c++解法+相关知识点复习)
  • 如何用vivado导出pin delay
  • DevExpressWinForms-TreeList-设置不可编辑
  • AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】
  • Android学习总结之Bitmap篇
  • 单片机-89C51部分:8、定时器
  • 一种声音·阿甘本|即将到来的中世纪;“新”与“旧”……
  • 最高人民法院、中国证监会联合发布《关于严格公正执法司法 服务保障资本市场高质量发展的指导意见》
  • “养胃骗局”大公开,真正有用的方法究竟是?
  • 有人倒卖试运营门票?上海乐高乐园:这些票存在无法入园风险
  • 夜读|尊重生命的棱角
  • 80后莆田市文旅局长马骏登台与杨宗纬合唱,“演唱会秒变旅游推介会”