【数据结构】有向无环图中的AOE网问题(含全部代码)

本文介绍了AOE网(有向无环图)中的关键路径问题,首先通过拓扑排序预处理,然后计算各事件的最早开始时间ve和最晚开始时间vl。如果某活动的最早开始时间和最晚开始时间相等,则该活动为关键活动。提供了C++代码实现关键路径的计算过程。
摘要由CSDN通过智能技术生成

AOE网与拓扑排序紧密联系。如果你还不了解拓扑排序可来此看一下 拓扑排序.
关键路径:是指路径长度最长的路径
图中每个点代表事件,而边代表活动。在AOE网中先采用拓扑排序进行预处理。然后根据拓扑排序对每个点进行处理,求出他们的ve(最早开始时间)和vl(最晚开始时间)。最后对每个边(活动)进行求最早开始时间和最晚开始时间,若两者相等,则为关键活动。

ve的求法
顺序遍历拓扑排序,ve(k)为到当前结点k的所有路径的最大值
vl求法
逆序遍历拓扑排序,vl(k)为逆序遍历到当前结点的所有路径的最小值
关键活动的最早开始时间 e和最晚开始时间 l
对于每一个活动(每一条边),不妨设起点为u,终点为v。则e=ve(u),l=vl(v)-w;其中w为边的权值

代码如下

/*
 * @Author: csc
 * @Date: 2020-12-13 14:20:02
 * @LastEditTime: 2020-12-17 20:22:01
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \code\aoe.h
 */
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int aoe_in[100], ve[100], vl[100];
int _map[100][100];
 
struct aoe_node
{
   
    int to, w;
    aoe_node(int a, int b) : to(a), w(b) {
   }
};
vector<aoe_node> aoe[100];
int n, m;
string tuopu = "";
void _tp()
{
   
    queue<int> q;
    for (int i = 1; i <= n; ++i)
    {
   
        if (!aoe_in[i])
            q.push(i), tuopu += (char)(i);
    }
    while (!q.empty())
    {
   
        int u = q.front(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值