博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关键路径
阅读量:4216 次
发布时间:2019-05-26

本文共 1403 字,大约阅读时间需要 4 分钟。

#include
#include
#include
#include
#include
#include
using namespace std;const int MAXV = 510;const int INF = 1000000000;int inDegree[MAXV], n, m;int ve[MAXV], vl[MAXV], e[MAXV], l[MAXV];struct Node{ int v; // 顶点编号 int w; // 边权 };vector
G[MAXV];stack
topOrder;bool topologicalSort(){ queue
q; for(int i = 0; i < n; i++) { 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++) { int v = G[u][i].v; inDegree[v]--; if(inDegree[v] == 0) { q.push(v); } // 用 ve[u] 来更新所有后继节点 v if(ve[u] + G[u][i].w > ve[v]) { ve[v] = ve[u] + G[u][i].w; } } } if(topOrder.size() == n) return true; else return false;} int CriticalPath(){ memset(ve, 0, sizeof(ve)); if(topologicalSort() == false) { return -1; } fill(vl, vl + n, ve[n - 1]); // vl 数组初始化, 初始值为汇点 ve 的值 while(!topOrder.empty()) { int u = topOrder.top(); topOrder.pop(); for(int i = 0; i < G[u].size(); i++) { int v = G[u][i].v; // 用 u 的所有后继结点 v 的 vl 值来更新 vl[u] if(vl[v] - G[u][i].w < vl[u]) { vl[u] = vl[v] - G[u][i].w; } } } // 遍历邻接表所有的边,计算活动的最早开始时间 e 和最迟开始时间 l for(int u = 0; u < n; u++) { for(int i = 0; i < G[u].size(); i++) { int v = G[u][i].v, w = G[u][i].w; int e = ve[u], l = vl[v] - w; if(e == l) { printf("%d -> %d", u, v); } } } return ve[n - 1]; // 返回关键路径长度 }int main(){ // ...... return 0;}

转载地址:http://jetmi.baihongyu.com/

你可能感兴趣的文章
DAG以及任务调度
查看>>
LeetCode——DFS
查看>>
MapReduce Task数目划分
查看>>
ZooKeeper分布式锁
查看>>
3126 Prime Path
查看>>
app自动化测试---ADBInterface驱动安装失败问题:
查看>>
九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)
查看>>
c++使用宏检测类是否包含某个函数或者变量属性
查看>>
CSS之Multi-columns的column-gap和column-rule
查看>>
CSS之Multi-columns的跨列
查看>>
CSS之浮动(一)
查看>>
CSS之浮动(二)
查看>>
AtomicInteger源码解析
查看>>
CopyOnWriteArraySet源码学习
查看>>
Openfiler 配置 NFS 示例
查看>>
Oracle 11.2.0.1 RAC GRID 无法启动 : Oracle High Availability Services startup failed
查看>>
Oracle 18c 单实例安装手册 详细截图版
查看>>
Oracle Linux 6.1 + Oracle 11.2.0.1 RAC + RAW 安装文档
查看>>
Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明
查看>>
Oracle 11g 新特性 -- ASM 增强 说明
查看>>