7-11 关键活动 (30 分)

本文探讨了关键路径问题的解决方法,指出拓扑排序和最早完成时间的计算并不足以解决问题,需要同时考虑最晚完成时间及边的机动时间。通过6步详细算法过程,解释如何找出关键路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7-11 关键活动 (30 分)

关键路径问题。
一开始我把问题想简单了,以为只要拓扑排序,然后再求最早的完成时间。再求最早时间的时候记录路径就行了。但是发现和我想的不大一样。
经过我再一次的思考发现,要把最早时间,最晚时间,边的机动时间。都求出来了才可以,唉,这不就是典型的关键路径吗。
大体思路如下:
1、读入数据,得到每个结点的入度出度。
2、用拓扑排序得到任务完成的先后顺序。
3、根据拓扑排序的结果,求出任务最早的完成时间。
4、根据最早时间和是不是有出度,求出最晚完成时间。
5、根据最早完成时间和最晚时间,求出边的机动时间。
6、根据机动时间得到结果。
代码:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int MAX = 110;
struct Edge{
   
   
    int s,e,cost,index,motive;
    Edge() {
   
   }
    Edge(int x,int y,int z,int m=0,int n=0):s(x),e(y),cost(z),index(m),motive(n) {
   
   }
};
int N,M,indegree[MAX],sorted[MAX],earliest[MAX],lastliest[MAX],outdegree[MAX]; 
vector<Edge> E;
vector<Edge> KeyPath;
bool compare(Edge a,Edge b){
   
   
    if(a.s != b.s){
   
   
        return a.s < b.s; //升序
    } else {
   
   
        return a.index > b.index; 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值