关键路径【有向无环图的最长路径】

拓扑排序的应用-有向无环图中的最长路径 最长路径问题 在一般的图中,最长路径问题不具有如最短问题一样的最优子结构属性(算法导论动态规划章节P218) 在最长路径问题中,子问题是相关的 求解一个子问题会对另一个子问题产生影响 在最短路径问题中,子问题是无关的 因此存在动态规划算法! NP−hardNP-hardNP−hard问题 但是,对于directed acyclic graphdirected \ acyclic \ graphdirected acyclic graph来说,存在线 阅读详情

1、ve数组的求解 

ve:顶点(事件)的最早开始时间(时刻)。

//拓扑序列 
stack<int> topOrder;

//拓扑排序,顺便求ve数组 
bool topologicalSort()
{
	queue<int> q;
	for(int i=0;i<n;i++)  //遍历所有点,将入度为0的点加入队列 
	{
		if(inDegree[i]==0)
		{
			q.push(i);
		}
	}
	while(!q.empty())  //队列非空 
	{
		int u=q.front();
		q.pop();
		topOrder.push(u);
		
		for(int i=0;i<G[u].size();i++) //遍历u的所有后继节点 
		{
			int v=G[u][i];
			inDegree[v]--;
			if(inDegree[v]==0) 
			{
				q.push(v);
			}
			//更新ve数组 
			if(ve[u]+G[u][i].w>ve[v])
			{
				ve[v]=ve[u]+G[u][i];
			}
		}
	}
	if(topOrder.size()==n) return true;
	else return false;
}

2、vl数组的求解 

vl:顶点(事件)的最迟开始时间(时刻)。 

fill(vl,vl+n,ve[n-1]); 

while(!topOrder.empty())   //topOrder出栈即为逆拓扑排序 
{
	int u=topOrder.top();
	topOrder.pop();
	
	for(int i=0;i<G[u].size();i++) //遍历u的所有后继节点 
	{
		int v=G[u][i].v;
		if(vl[v]-G[u][i].w<vl[u])
		{
			vl[u]=vl[v]-G[u][i];
		} 
	}	
}

3、求解关键路径的长度

关键节点:

边(活动)的最早开始时间=最迟开始时间。

int criticalPath() 
{
	memset(ve,0,sizeof(ve));
	if(topologicalSort()==false)
	{
		return -1;
	}
	
	//求解vl数组 
	fill(vl,vl+n,ve[n-1]);
	
	while(!topOrder.empty())
	{
		int u=topOrder.top();
		topOrder.pop();
		for(int i=0;i<G[u].size();i++)
		{
			int v=G[u][i].v;
			if(vl[v]-G[u][i].w<vl[u])
			{
				vl[u]=vl[v]-G[u][i].w;
			}
		}
	}
	
	for(int u=0;u<n;u++)  //遍历邻接表的所有边 
	{
		for(int i=0;i<G[u].size();i++)
		{
			int v=G[u][i];
			int w=G[u][i].w;
			int e=ve[u];  //活动的最早开始时间 
			int l=vl[v]-w;  //活动的最迟开始时间
			if(e==l)
			{
				printf("%d->%d\n",u,v);
			}			 
		}		
	}
	
	return ve[n-1];  //返回关键路径的长度 
}

 

C++之求有向无环图的最长路径(拓扑排序+动态规划) 最近在做最长路径的实验, 阅读详情

相关推荐

有向无环图—关键路径详解(最通俗易懂的版本)【数据结构】

文章目录有向无环图拓扑排序AOV-网AOE-网关键路径的概念事件的最早/晚开始时间事件和活动的区分活动的最早/晚开始时间 有向无环图 拓扑排序 AOV-网 由于有向无环图可以用一种自然的方式对优先关系或依赖关系进行描述,因此在工程计划与管理方面有广泛而重要的应用。一个大的工程往往可以分解为若干相对独立的子工程(活动),子工程之间在进行的时间上有一定的相互制约关系。将这些子工程之间的先后关系用有向图表示,其中顶点表示活动,有向边表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称AOV网。

weixin_43757333的博客 3万+

在有向无环图中求最长路径

原文地址:http://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/ 给定一个带权有向无环图及源点S,在图中找出从S出发到图中其它所有顶点的最长距离。 对于一般的图,求最长路径并不向最短路径那样容易,因为最长路径并没有最优子结构的属性。实际上求最长路径属于NP-Hard问题。然而,对于有向无 环

Revivedsun的专栏 3万+

//众神云集、群魔乱舞、以一抵百、砥砺前行//18747 最长路径

题目描述 Description 在一个工程项目里,多项工作可以同时进行。 我们可以用有向无环图表述项目流程,把项目中的事件表述为结点,把活动表述成有权值的边。 现在我们已知项目共有n个事件,起点为1,终点为n,m个活动。 请你计算出这个项目的最早完成事件,也就是起点到收点的最长路径。 输入格式 第一行两个整数n和m,代表结点数量和边数量。(1<=n,m<=100) 下面m行,每行3个整数a,b,x,表示点a到点b之间有一条长度为x的有向边。 输出格式 一个整数,起点到终点的最长路径. 输入样

Leo_zehualuo的博客 502

有向无环图中的最长路径-PART1

有向无环图中的最长路径-PART1 给定一个加权有向无环图DAG和一个源点s在它,找到从s中最长的距离在给定图中的所有其他顶点 一般图的最长路径问题不像最短路径问题那么容易,因为最长路径问题不具有最优子结构属性。事实上,最长路径问题对于一般的图来说是NP-Hard问题。然而,对于有向无环图的最长路径问题,其具有线性时间解。这个想法类似于有向无环图中最短路径的线性时间解决方案,我们使用拓扑排序。 我们将到所有顶点的距离初始化为负无穷大,到源点的距离初始化为 0,然后我们找到图的拓扑排序。图的拓扑排序表示图

wat1r的博客 3266

ShortestPath:Java程序查找有向图的节点之间的最短路径

最短路径 Java程序,用于查找有向图的节点之间的最短路径。 (Dijkstra的算法) 该程序是为完成课程作业而编写的。 因此要求如下:在图形中至少有6个节点没有GUI,只有控制台应用程序。 必须有堆栈才能推送和弹出跟踪的节点。 加权方向图。 开发:Anmolpreet Sandhu

保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控加装‘眼睛’,实现自动避障与定高

经过多次测试,前向雷达的最佳安装位置是机架前部下方5-10cm处,倾斜角度20-30度。电源方面,建议为CAN设备单独供电,避免电机启动时的电压骤降导致数据异常。北醒TFmini-i-CAN雷达与PixHawk飞控的组合,为DIY爱好者打开了低成本实现智能避障的大门。实际部署时,需确保整个CAN网络的波特率一致(TFmini-i默认为250kbps),每个设备具有唯一ID。雷达的安装角度也直接影响检测效果,建议通过3D打印支架将雷达向前下方倾斜15-30度。当使用多个雷达时,需为每个设备创建独立的参数组。

weixin_30892889的博客 337

DAG(有向无环图)最长路——动态规划求解

文章目录1 问题描述1.1 求整个DAG的最长路径(即不固定起点和终点)1.2 固定终点,求DAG的最长路径2 求解问题12.1 求解最长路径长度2.2 求解最长路径2.2.1 路径序列的字典序3 求解问题23.1 求解最长路径长度3 应用3.1 实际例题 1 问题描述 1.1 求整个DAG的最长路径(即不固定起点和终点) 1.2 固定终点,求DAG的最长路径 2 求解问题1 2.1 求解最长路径...

韩江雪de 小屋 1万+

ArduPilot + Gazebo + Mavros + QGC + 遥控器:从仿真到实机的自主轨迹控制实践

本文详细介绍了基于ArduPilot、Gazebo、Mavros和QGC的无人机自主轨迹控制全流程实践。从仿真环境搭建、多终端协同配置,到遥控器集成与自主圆形轨迹算法实现,提供了完整的代码示例和实机迁移要点,帮助开发者快速掌握无人机自主控制技术。

corn8的博客 941

数据结构:有向无环图

数据结构:有向无环图

闲余知道 1403

COLMAP性能优化实战:如何用GPU加速和并行计算让重建速度提升300%

本文详细介绍了如何通过GPU加速、并行计算和参数调优显著提升COLMAP的三维重建效率。从硬件资源分配到计算流程优化,再到大型数据集的分块处理策略,全面解析了将重建速度提升300%以上的实用技巧,特别适合处理无人机航拍和室内扫描等大规模三维重建项目。

weixin_29098391的博客 202

二维“能量源”(电场、磁场、功率)入射边界设置方法

comsol光学仿真设计相关学习笔记和经验 1. 二维“能量源”(电场、磁场、功率)入射边界设置方法 2.边界条件设置薄膜材料

VJCP_90909Bu0的博客 5193

图算法专题(四)【拓扑排序】

图算法专题四拓扑排序有向无环图拓扑排序 拓扑排序 有向无环图   如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(DAG)。 拓扑排序

苣篛 610

MATLAB功率谱函数psd与pwelch的使用

在网上看到 clear; Fs=1000; n=0:1/Fs:1; y=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); Nfft=1000; window=hanning(100); noverlap=20; dflag='none'; [Pxx,f]=psd(y,Nfft,Fs,window,noverlap); figure plot(f,10*log10(Pxx)); xlabel('frequency/Hz');ylab

qq_41687938的博客 2万+

SCAU------18747 最长路径

时间限制:1000MS 代码长度限制:10KB 题型: 编程题 语言: 不限定 Description 在一个工程项目里,多项工作可以同时进行。 我们可以用有向无环图表述项目流程,把项目中的事件表述为结点,把活动表述成有权值的边。 现在我们已知项目共有n个事件,起点为1,终点为n,m个活动。 请你计算出这个项目的最早完成事件,也就是起点到收点的最长路径。 输入格式 第一行两个整数n和m,代表结点数量和边数量。(1<=n,m<=100) 下面m行,每行3个整数a,b,x,表示点a到点b之间

zg 442

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解

实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。

猫敷雪 400

Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法

摘要:本文详细分析了MTK平台待机功耗问题的调试方法,重点介绍了SPM电源管理机制、26M时钟控制逻辑以及系统深睡眠状态的判断标准。文章提供了完整的Debug流程,包括日志抓取、唤醒源分析、SCP睡眠状态检查以及时钟/LDO状态排查等实用技巧,并给出硬件漏电点和软件配置异常的排查方案。针对不同模块(Modem/Conn/SSPM等)提供了具体的电源管理绕过命令,适用于功耗问题调试和低功耗模式验证场景。

561

【PAT甲级复习】 专题复习三:关键路径

文章目录专题复习三(9.4):关键路径1 求整个DAG中的最长路径2 求整个图中终点为T的最长路径3 一个用关键路径解决的经典例子 专题复习三(9.4):关键路径 所谓的关键路径其实就是DAG(有向无环图)的最长路径,使用动态规划解决比较简洁易懂。 1 求整个DAG中的最长路径 也即不固定起点和终点,这里使用动态规划解决,用dp[i]表示从节点i出发能得到的最长路径,则递推式为dp[i] = max(dp[i], DP(j) + length(i->j)),边界条件为出度为0的节点的dp[i]一定为0

Harryline的博客 493

在最新版eclipse中配置使用AI AIcoder _AIcoder配置GPUSTACK使用_配置OLLAMA本地AI模型利用_集合---AI场景应用工作笔记

本文介绍了三款实用的编程辅助工具:一款便捷的反编译插件,可直接在插件市场安装使用;GitHub Copilot提供每月2000次代码补全和50条聊天记录的免费额度,支持智能代码提示功能;aicoder支持配置本地模型运行。这些工具都能有效提升开发效率,其中GitHub Copilot的智能补全功能尤为突出。

添柴程序猿的专栏 1250

图的拓扑排序与关键路径

拓扑排序与关键路径是有向无环图上的应用。两种算法使用同一种动态规划的思想,因此关键路径的代码几乎和拓扑排序完全一样。

sigd的博客 1308

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

拓扑排序及关键路径

拓扑排序的实现: 辅助数组: int Indegree[100]:用来存放各结点的前驱结点个数 tops[10]:用来存放排序后的顺序 因为需要计算每个结点的入度和出度,所以用了十字链表。 过程 计算每个结点的前驱个数,记录到indegree中; 让前驱个数为零的结点入栈; 当栈不为空时,输出栈顶结点,加入到tops中。遍历所有以次结点,为尾结点的结点,让这些结点的入度减一,如果这个结点的入...

沐目的博客 439

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

拓扑排序和关键路径

#include<stdio.h> #include<string.h> #include<vector> #include<queue> #include<stack> using namespace std; struct Node{ int v,w; }; const int maxv=1010; vector<Node> g[maxv]; //邻接表 int n,m,indegree[maxv]; //顶点数、边数、.

zy的博客 244

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

实验七:18747 关键路径

时间限制:1000MS 代码长度限制:10KB提交次数:0 通过次数:0题型: 编程题 语言: G++;GCC。

Y_Jiay的博客 248

HDOJ 4109. Instructions Arrangement【关键路径+拓扑排序+动态规划+记忆化搜索】⭐⭐⭐⭐⭐

文章目录题目描述代码实现码后反思 题目描述 代码实现 //使用动态规划解题,同时需要记录开始和结束时间 //数组下标是从0开始的 #include <cstdio> #include <vector> #include <queue> #include <algorithm> using namespace std; const int maxn = 1010; const int inf = 0x3fffffff; int n; int m; str.

yc_cy1999的博客 456

《算法笔记》第4章 入门篇(2)---算法初步 10.7 关键路径

1.AOV网和AOE网 超级源点和超级汇点: 10.7.2 最长路径: 10.7.3 关键路径: /* 拓扑排序: 1.设置栈 int类型 topOrder 2.bool拓扑排序函数: 1.设置队列q 2.for循环,将所有入度为0的点放入到队列q中 3.while循环: 1.取出队首元素 2.弹出 3.将u加入到拓扑序列中

wsfhdhjs的博客 180

codeup 关键路径 模板

#include <iostream> #include <vector> #include <queue> #include <stack> #include <algorithm> using namespace std; const int SIZE = 100; /* 第一行输入一个正整数n(1<=n<=5),其代表测试数据数目,即图的数目 第二行输入x(1<=x<=15)代表顶点个数,y(1<=y<=

weixin_45748610的博客 327

DP_DAG最长路径_关键路径

DAG最长路 DAG最长路径 以i为终点的最长路径 DAG最长路 DAG指的是有向无环图, 求它的最长路径有一种DP方法. 我们建立一个数组dp[n+1], dp[i]代表从这个结点出发的最长路径, 那么要求出dp[i], 我们只要求出从i出发的下一结点的dp[j], 使得dp[i] = max(dp[i], dp[j] + G[i][j]), 这就是它的状态转移方程....

姬小野的博客 3960
上一篇: 拓扑排序
下一篇: 动态规划
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值