数据结构之关键路径
1、AOE网AOE网是⼀个带权的有向无环图其中顶点表示事件Event弧表示活动权表示活动持续的时间。2、源点和汇点AOE网中入度为零的点称为源点将出度为零的点称为汇点。3、关键路径完成工程的最短时间是从源点到汇点的最长路径的长度。路径长度最长的路径就叫做关键路径。ETVEarliest Time Of Vertex)事件最早发生时间就是顶点的最早发生时间。LTVLatest Time Of Vertex)事件最晚发生时间就是每个顶点对应的事件最晚需要开始的时间如果超出此时间将会延误整个工期。ETE(Earliest Time Of Edge)活动的最早开工时间就是弧的最早发⽣时间。LTE(Lastest Time of Edge)活动的最晚开工时间就是不推迟工期的最晚开工时间。4、关键路径算法关键路径Critical Path针对有向无环加权图AOE网工程活动网络是从源点入度为0到汇点出度为0的最长路径。路径上的活动称为关键活动关键路径长度决定整个工程的最短完成时间关键活动延时会直接导致整体工程延时。步骤1拓扑排序对AOE网进行拓扑排序得到有序节点序列若图存在环则无关键路径工程无法正常进行。步骤2计算最早发生时间 ve[]ve[i]节点i事件的最早发生时间从源点正向推导。公式源点 ve[start] 0遍历拓扑序列对当前节点u的所有出边 u→v权重w执行 ve[v] max(ve[v], ve[u] w)。步骤3计算最晚发生时间 vl[]vl[i]节点i事件的最晚发生时间不推迟整体工程工期从汇点逆向推导。公式汇点 vl[end] ve[end]逆序遍历拓扑序列对当前节点v的所有入边 u→v权重w执行 vl[u] min(vl[u], vl[v] - w)。步骤4筛选关键节点与关键路径若节点满足 ve[i] vl[i]该节点为关键节点由相邻关键节点组成的路径即为关键路径。#includeiostream#includevector#includequeue#includecstring#includealgorithmusingnamespacestd;constintMAXN105;constintINF0x3f3f3f3f;// 邻接表存储: to目标节点, weight边权, next下一条边structEdge{intto,w;Edge(intt,intww):to(t),w(ww){}};vectorEdgeadj[MAXN];// 正向邻接表(拓扑、求ve)vectorEdgereverseAdj[MAXN];// 逆向邻接表(求vl)intinDegree[MAXN];// 入度数组vectorinttopoSeq;// 存储拓扑排序序列intve[MAXN],vl[MAXN];// 最早、最晚发生时间// 拓扑排序booltopoSort(intn){queueintq;// 初始化入度为0的节点入队for(inti1;in;i){if(inDegree[i]0)q.push(i);}while(!q.empty()){intuq.front();q.pop();topoSeq.push_back(u);// 遍历出边更新后继节点入度for(Edge e:adj[u]){intve.to;inDegree[v]--;if(inDegree[v]0)q.push(v);}}// 拓扑序列长度不等于节点数说明有环无关键路径returntopoSeq.size()n;}// 计算关键路径voidcriticalPath(intn){// 1. 初始化ve数组正向求最早发生时间memset(ve,0,sizeof(ve));for(intu:topoSeq){for(Edge e:adj[u]){intve.to,we.w;if(ve[v]ve[u]w){ve[v]ve[u]w;}}}// 2. 初始化vl数组逆向求最晚发生时间intendNodetopoSeq.back();fill(vl,vln1,INF);vl[endNode]ve[endNode];// 逆序遍历拓扑序列for(intitopoSeq.size()-1;i0;i--){intvtopoSeq[i];for(Edge e:reverseAdj[v]){intue.to,we.w;if(vl[u]vl[v]-w){vl[u]vl[v]-w;}}}// 3. 输出关键节点和关键路径cout 关键路径计算结果 endl;cout工程最短总工期ve[endNode]endl;cout关键节点;for(inti1;in;i){if(ve[i]vl[i]){couti ;}}coutendl;cout关键活动(边)endl;for(intu1;un;u){// 筛选关键节点之间的边if(ve[u]!vl[u])continue;for(Edge e:adj[u]){intve.to,we.w;if(ve[v]vl[v]ve[v]ve[u]w){cout节点u - 节点v (工期:w)endl;}}}}intmain(){// 初始化memset(inDegree,0,sizeof(inDegree));intn,m;cout请输入节点数、边数;cinnm;// 构建正向、逆向邻接表for(inti0;im;i){intu,v,w;cout请输入第i1条边(起点 终点 权重);cinuvw;adj[u].emplace_back(v,w);reverseAdj[v].emplace_back(u,w);inDegree[v];}// 拓扑排序判环if(!topoSort(n)){cout图中存在环路无关键路径endl;return0;}// 计算并输出关键路径criticalPath(n);return0;}

相关新闻

Peter Corke机器人工具箱:重塑机器人算法开发的智能引擎

Peter Corke机器人工具箱:重塑机器人算法开发的智能引擎

Peter Corke机器人工具箱:重塑机器人算法开发的智能引擎 【免费下载链接】robotics-toolbox-matlab Robotics Toolbox for MATLAB 项目地址: https://gitcode.com/gh_mirrors/ro/robotics-toolbox-matlab 在机器人技术快速发展的今天,算法开发效率…

2026/7/25 0:47:46 阅读更多 →
终极解决方案:如何彻底修复Reloaded II游戏模组加载失败问题

终极解决方案:如何彻底修复Reloaded II游戏模组加载失败问题

终极解决方案:如何彻底修复Reloaded II游戏模组加载失败问题 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 你是否在使用Reloaded …

2026/7/25 18:10:04 阅读更多 →
MySQL事务全解析

MySQL事务全解析

一、事务核心概念 事务是一组数据库操作的集合,是数据库最小逻辑执行单元。 核心特性:一组操作要么全部成功,要么全部失败回滚,不会出现 “一半成功、一半失败” 的脏数据状态。 经典业务场景:银行转账,…

2026/7/21 18:17:29 阅读更多 →

最新新闻

【计算机Python毕业设计案例】基于 Python 的智慧校园学生课堂考勤监督管理平台 学生请假审批与考勤台账管理系统设计(程序+文档+讲解+定制)

【计算机Python毕业设计案例】基于 Python 的智慧校园学生课堂考勤监督管理平台 学生请假审批与考勤台账管理系统设计(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/26 0:08:34 阅读更多 →
【计算机毕业设计案例】基于 Django 的餐饮会员个性化消费管理系统 餐饮门店供需信息一体化管理平台设计(程序+文档+讲解+定制)

【计算机毕业设计案例】基于 Django 的餐饮会员个性化消费管理系统 餐饮门店供需信息一体化管理平台设计(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/26 0:08:34 阅读更多 →
【计算机毕业设计案例】 基于Django的数字化二手电子产品流转交易平台设计 二手数码设备分类检索交易网站设计与实现(程序+文档+讲解+定制)

【计算机毕业设计案例】 基于Django的数字化二手电子产品流转交易平台设计 二手数码设备分类检索交易网站设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/26 0:08:34 阅读更多 →
发酵精华水代工厂的车间底牌:同源工艺、验货硬指标与利润避坑指南

发酵精华水代工厂的车间底牌:同源工艺、验货硬指标与利润避坑指南

“拿着大牌礼盒图片来找源头工厂做品质定制,做出来三十块钱,为什么客户倒出来一抹就说‘这跟专柜的不一样’?”——这阵子几乎天天有私域团长和实体店主问我同样的问题。说白了,大家最关心的不是能不能做,而是怎么做才…

2026/7/26 0:08:34 阅读更多 →
打造专属词汇库:Qwerty Learner自定义词典全攻略

打造专属词汇库:Qwerty Learner自定义词典全攻略

打造专属词汇库:Qwerty Learner自定义词典全攻略 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://gitcode.…

2026/7/26 0:08:34 阅读更多 →
卡梅德生物技术快报|抗体筛选:抗体筛选中的噬菌体展示四参数调优——从流程设计到数据验证

卡梅德生物技术快报|抗体筛选:抗体筛选中的噬菌体展示四参数调优——从流程设计到数据验证

一、问题提出:当前抗体筛选流程的瓶颈在哪里?在蛋白-抗体工具研发和诊断试剂开发中,抗体筛选是决定项目成败的关键节点。实际操作中,很多团队发现同样的噬菌体库、同样的靶蛋白,却得不到同样的结果——有人三轮输出高质…

2026/7/26 0:07:33 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻