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

代码随想录算法训练营第五十八天 | 图论part08

117. 软件构建

在这一题中,只需要输出一种方法。使用BFS的方法,找到入度为0的节点,将其从树中删去,重复上述步骤,直到没有入度为0的节点。如果此时没有删除所有的节点,表明这个有向图有环,输出-1.否则,正常输出。

#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
#include <fstream>using namespace std;int main() {int n, m;int s, t;ifstream infile("input.txt");cin >> n >> m;unordered_map<int, vector<int>> table;vector<int> inDegrees(n, 0);while (m--) {cin >> s >> t;inDegrees[t]++;table[s].emplace_back(t);}queue<int> que;for (int i = 0; i < n; ++i) {if (inDegrees[i] == 0)que.push(i);}vector<int> result;while (!que.empty()) {int cur = que.front();que.pop();result.push_back(cur);for (int t : table[cur]) {inDegrees[t]--;if (inDegrees[t] == 0)que.push(t);}}if (result.size() != n) cout << -1;else {for (int i = 0; i < n - 1; ++i) cout << result[i] << " ";cout << result[n - 1];}return 0;
}

47. 参加科学大会

思路是三部:

  1. 找到距离源点最近的节点
  2. 将节点标记为已访问
  3. 更新非访问节点的minDist

本算法所需要的数据结构:
存放图的临接矩阵
记录访问的一维数组
记录到源点的距离的一维数组

#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
#include <fstream>
#include <climits>
using namespace std;int main() {int n, m;int s, e, v;ifstream infile("input.txt");cin >> n >> m;vector<vector<int>> graph(n + 1, vector<int>(n + 1, INT_MAX));while (m--) {cin >> s >> e >> v;graph[s][e] = v;}// 记录访问的一维数组vector<bool> visited(n + 1, false);// 记录到源点的距离的一维数组  vector<int> minDist(n + 1, INT_MAX);minDist[1] = 0;for (int i = 1; i <= n; ++i) {// 找到距离源点最近的节点int cur = 1;int minVal = INT_MAX;for (int v = 1; v <= n; ++v) {if (!visited[v] && minDist[v] < minVal) {cur = v;minVal = minDist[v];}}// 将节点标记为已访问visited[cur] = true;// 更新非访问节点的minDistfor (int e = 1; e <= n; ++e) {if (!visited[e] && graph[cur][e] != INT_MAX && graph[cur][e] + minVal < minDist[e])minDist[e] = graph[cur][e] + minVal;}}if (minDist[n] == INT_MAX) cout << -1 << endl;else cout << minDist[n] << endl;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 24数学建模国赛准备!!!!(10——马氏链模型)
  • 【甲方安全建设】富文本编辑器XSS漏洞攻击及防御详析
  • Android APK打包脚本
  • JavaScript练习(二)
  • TCP数据包——报文头部组成
  • golang zap日志模块封装sentry
  • 【 html+css 绚丽Loading 】 000027 旋风破云扇
  • C++学习,指针空指针
  • 万亿低空经济:无人机飞手考证正当时
  • ArcGIS栅格裁剪与合并,制作等高线
  • 使用对象池优化 C++ 程序性能的实用指南
  • 虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!
  • 使用 ip route 命令配置 Linux 路由表的详细指南
  • java基础之 静态代码块、实例代码块、构造方法执行顺序问题
  • udp可靠传输中ACK与NACK的选择
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • android 一些 utils
  • C++入门教程(10):for 语句
  • Docker 笔记(2):Dockerfile
  • eclipse的离线汉化
  • Fastjson的基本使用方法大全
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • php中curl和soap方式请求服务超时问题
  • vue--为什么data属性必须是一个函数
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 工程优化暨babel升级小记
  • 前端技术周刊 2019-01-14:客户端存储
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 数组大概知多少
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • (1)Nginx简介和安装教程
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C++17) std算法之执行策略 execution
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (学习总结16)C++模版2
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)德国人的记事本
  • .Net MVC + EF搭建学生管理系统
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .Net中ListT 泛型转成DataTable、DataSet
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @KafkaListener注解详解(一)| 常用参数详解
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @SpringBootApplication 包含的三个注解及其含义
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [.NET]桃源网络硬盘 v7.4
  • []T 还是 []*T, 这是一个问题