AOE求关键路径

AOE

AOE图就是将节点作为事件,而中间的弧作为活动,权是活动持续的时间。

关键路径

在AOE图,一个事件发生的要求是通向其的活动全部结束,那么这么时间发生的最早时间就是与之相连的所有活动全部结束后的时间,而关键路径就是,使得事件都发生的路径。这个路径的时间一定是最长的。

基本思想

1.可以利用邻接矩阵的方式存储元素之间是否相连
2.在使用一个数组记录节点的入度
3.一个记录每个节点关键路径的字符串数组
首先判断入读和和出度为零的节点,分别记为tail,head。
将tail入队,然后,遍历以队首元素为tail的弧,若是不为无穷或则0,就将head的入度减一,知道入度为0就入队,直到队为空就结束。

实现代码

 while(!all.empty())    //all为队列
    {
        int j=all.front();
        all.pop();
        for(int i=1;i<=a;i++)
        {
            if(p[j][i]!=9999)
            {
                if(v[j]+p[j][i]>v[i])
                {v[i]=v[j]+p[j][i];
                  path[i]=path[j];
                  path[i].push_back(48+j);
                }
                  l[i]--;
                  if(l[i]==0)
                  {
                      all.push(i);    //入队就说明所有通过他的路径都以遍历结束,并且选出最长路径
                  }
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王不头秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值