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

卡码网KamaCoder 117. 软件构建

题目来源:117. 软件构建

C++题解(来源代码随想录):拓扑排序:给出一个 有向图,把这个有向图转成线性的排序。拓扑排序也是图论中判断有向无环图的常用方法

拓扑排序的过程,其实就两步:

  1. 找到入度为0 的节点,加入结果集
  2. 将该节点从图中移除

循环以上两步,直到 所有节点都在图中被移除了。

#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
using namespace std;
int main() {int m, n, s, t;cin >> n >> m;vector<int> inDegree(n, 0); // 记录每个文件的入度unordered_map<int, vector<int>> umap;// 记录文件依赖关系vector<int> result; // 记录结果while (m--) {// s->t,先有s才能有tcin >> s >> t;inDegree[t]++; // t的入度加一umap[s].push_back(t); // 记录s指向哪些文件}queue<int> que;for (int i = 0; i < n; i++) {// 入度为0的文件,可以作为开头,先加入队列if (inDegree[i] == 0) que.push(i);//cout << inDegree[i] << endl;}// int count = 0;while (que.size()) {int  cur = que.front(); // 当前选中的文件que.pop();//count++;result.push_back(cur);vector<int> files = umap[cur]; //获取该文件指向的文件if (files.size()) { // cur有后续文件for (int i = 0; i < files.size(); i++) {inDegree[files[i]] --; // cur的指向的文件入度-1if(inDegree[files[i]] == 0) que.push(files[i]);}}}if (result.size() == n) {for (int i = 0; i < n - 1; i++) cout << result[i] << " ";cout << result[n - 1];} else cout << -1 << endl;}

http://www.lryc.cn/news/453630.html

相关文章:

  • Acwing 线性DP
  • Docker面试-24年
  • ubuntu 安装k8s
  • No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线
  • spring揭秘24-springmvc02-5个重要组件
  • 关键字:register
  • 力扣 简单 110.平衡二叉树
  • 基于深度学习的代码优化
  • 汽车电气系统中KL30、KL15、KL50、KLR、KL31、KL87、KL75的作用
  • 随笔(四)——代码优化
  • 安装管理K8S的开源项目KubeClipper介绍
  • 北交大研究突破:塑料光纤赋能低成本无摄像头AR/VR眼动追踪技术
  • 算法题总结(七)——哈希表
  • PS批量执行动作,ps批量修改图片大小,并修改文件的类型
  • CentOS 替换 yum源 经验分享
  • Elasticsearch基础_2.数据类型
  • docker快速安装ELK
  • GS-SLAM论文阅读笔记-CaRtGS
  • 15分钟学 Python 第36天 :Python 爬虫入门(二)
  • Spring:强制登陆与拦截器
  • MySQL-数据库约束
  • 线性表三——队列queue
  • 算法笔记(十)——队列+宽搜
  • webpack配置全面讲解【完整篇】
  • 十、kotlin的协程
  • vscode qt 最新开发环境配置, 基于最新插件 Qt All Extensions Pack
  • 【MySQL】Ubuntu环境下MySQL的安装与卸载
  • C# StringBuilder类:高效构建和修改字符串的利器
  • AVL平衡树(AVL Tree)
  • 【python实操】python小程序之两数取大值以及login登录