关键活动

PTA 关键活动 7-11 关键活动(30 分)假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设... 阅读详情
#include<stdio.h>
#include<stdlib.h>

#define MAXN 102 
#define INFINITY 999

int G[MAXN][MAXN] ;//图
int earliest[MAXN];//最早开始时间
int latest[MAXN];//最晚开始时间
int indegree[MAXN];//入度
int outdegree[MAXN];//出度
int max(int a, int b)
{
    if(a > b)
    {
        return a;
    }
    else
    {
        return b;
    }
}
int min(int a, int b)
{
    if(a < b)
    {
        return a;
    }
    else
    {
        return b;
    }
}

void late_time(int n,int max)
{
    int queue[n];//建立一个简单队列
    int first = -1,rear = -1;

    for(int i=1; i<=n; i++)//将入度为0的节点压进去 
    {
        if(outdegree[i] == 0)
        {
            rear++;
            queue[rear] = i; //入队
            
            latest[i] = max;
        }
    } 


    while(first < rear)
    {
        first++;
        int v = queue[first];//出队
        
        for( int i=n; i>=1; i--) //对V的每个邻接点处理
        {
            if(G[i][v]>=0)
            {
                outdegree[i]--;//出度减一
                latest[i] = min(latest[i],latest[v]-G[i][v]); 
                if(outdegree[i] == 0)
                {
                    queue[++rear] = i; 
                }           
            }

        } 
    }
}

int early_time(int n)
{
    int queue[n];//建立一个简单队列
    int first = -1,rear = -1;

    for(int i=1; i<=n; i++)//将入度为0的节点压进去 
    {
        if(indegree[i] == 0)
        {   
            queue[++rear] = i; //入队
        }
    } 

    int cnt = 0;
    while(first < rear)
    {
        int v = queue[++first];//出队
        cnt++;
        for( int i=1; i<=n; i++) //对V的每个邻接点处理
        {
            if(G[v][i]>=0)
            {
                indegree[i]--;//入度减一
                earliest[i] = max(earliest[i],earliest[v]+G[v][i]);
                if(indegree[i] == 0) 
                {
                queue[++rear] = i; 
                }           
            }

        } 
    }

    int ans = 0;
    if (cnt != n)//不能拓扑排序 
    {
        ans = -1;
    }
    else
    {
        ans = earliest[0];//可以拓扑排序,找最大值 
        for(int i=1; i<=n; i++)
        {
            if(earliest[i] > ans)
            {
                ans = earliest[i];
            } 
        }
    }

    return ans;
}

void intial(int n)
{
    int i,j;
    for( i=1;i<=n;i++)//节点从1开始 
    {
        for(j=0;j<=n;j++)
        {
            G[i][j] = -1;
        }
        earliest[i] = 0;
        indegree[i] = 0;
        outdegree[i] = 0;
        latest[i] = INFINITY; 
    }

}


int main()
{
    int n,m;
    scanf("%d %d",&n,&m);//读入节点,读入活动数
    intial(n);

    int i;
    int s,e,c;//source,end,cost
    for(i=1;i<=m;i++)//读入数据 
    {
        scanf("%d %d %d",&s,&e,&c);
        G[s][e] = c;//有向边 
        indegree[e]++;//入度初始化 
        outdegree[s]++;//出度初始化 
    }

    int flag;
    flag = early_time(n);
    if(flag == -1)
    {
        printf("0\n");
    }
    else
    {
        printf("%d\n",flag);
        late_time(n,flag);
        for (int i = 1; i <= n; i++)
        {  
            if (earliest[i] != latest[i])  
                continue;  
            for (int j = n; j >= 1; j--)
            {  
                if (G[i][j] >= 0 && earliest[j] == latest[j] 
                && (latest[j] - earliest[i] == G[i][j]))  
                    printf("%d->%d\n", i, j);  
            }  
        }  
    }

    return 0; 
} 

pta 关键活动 (队列) 关键活动假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖... 阅读详情

相关推荐

7-1 关键活动(30 分)

假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系...

lml_l_l的博客 2315

求关键活动算法

求关键活动算法(严蔚敏版,附详细注释) AOE网 关键路径 在AOE网中,一个顶点表示一个工程事件,而一条边表示一个活动。 关键活动 简单理解:当该弧的最早发生时间与最晚发生时间相同时,改活动(即为弧)即为关键活动。 算法实现(伪代码) 关于具体算法中用到的四个数组的意义与算法的实现流程,这里仅在代码中简单解释,具体理解请自行查阅资料。 //变量说明:ve数组表示各事件最早发生时间,其求法为拓扑排序,正序所有发生时间中最大的。 //vl数组为各事件最晚发生时间,其求法为拓扑逆序,逆序事件中所有发生

Robbery07的博客 2029

7-11 关键活动(一)

7-11 关键活动 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因...

A Little Programmer's Base 7100

关于关键活动问题的一些理解,建议读一下

关键路径和关键活动问题最开始学的时候不是很容易,理解上可能有些晦涩,笔者想在这里帮助各位初学者深入理解 笔者想说一下自己对于事件与活动的定义的理解,可以这样想:如果有一个工程P,为了完成P,我们需要完成一系列的活动a1,…an,活动ai之间可能有着一定的相互依赖关系,即一些活动的发生依赖于另外一些活动的发生,但依赖不一定处处存在,可以有两个没关系的活动,那么他们可以同时进行,实际上也应该同时进行,我们不打算让故意拖延存在(也就是说两个可以同时进行的活动,人为的让一个活动就是不发生,如果这样做了,那工程可以无

qq_43816521的博客 1842

Oracle数据库安装及配置(Oracle19c)

Windows 10安装Oracle 19c教程

weixin_69200200的博客 2万+

RWEQ土壤风蚀模型的估算与变化归因分析

本次以介绍RWEQ模型的基本原理及数据需求,再结合案例讲解RWEQ模型中区域地理空间数据库构建的方法和各个参量提取的原理与方法,最后结合典型案例进行综合讲解风蚀模数估算、制图及归因分析。空间分析与制图:提取分析、局部分析、邻域分析、区域分析、插值分析、平滑处理、像元提取、采样与重采样。以某实际应用为案例,掌握RWEQ模型进行当地土壤风蚀量空间分布分析整体流程。地图服务器、在线地图、范围指示器、格网、表格、基础地图服务使用规则介绍。掌握土壤风蚀模型的原理、优势点及因子组成。

2301_77413856的博客 1193

AOE图,最早活动时间最晚活动时间,关键路径关键节点

我们直接举例,假设你和朋友约好去看电影,V7是你们约定到达地点的时间,v1节点是大家一起从各自家里出发的时间,其中的v2,v3,v4,v5,v6是各自坐交通工具到达换乘地点的时间,其中边的权值为你需要花费的时间。 我们假设走a1路线的小朋友叫大明,走a2的叫二明,走a3的叫三明。 那其实就很好理解了。 关键路径:最早开始时间 计算方式:每个节点找它到下个节点的最大路径 具有最大路径长度的路径为关键路径。因为你得保证每个人都到场才能去看电影嘛,那你肯定得等到最后一个人到了才能走。图中就是v...

黑莫格斯踩坑史 1万+

基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践

本文详细介绍了基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践。通过分析PPS信号的时序要求,对比不同定时器的特性,并提供完整的代码实现与调试技巧,帮助开发者解决多传感器数据融合中的时间同步问题。实测表明,该方案在车载环境中稳定运行超过2000小时。

weixin_30540691的博客 324

c++关键活动

关键活动: 一个工程项目一般是由一些子任务构成,子任务之间有的可以并行执行,有的必须在完成某些任务之后才可以执行,给出每个任务完成所需要的时间,则可以算出整个工程所需要的最短时间,在这些子任务中,有些任务推迟几天也不会影响这个工程的工期,但是有些任务必须准时完成,否则会延误整个工期,这种活动称为关键活动。 1.该问题的本质是一个图,图可以用邻接表来存储,邻接表是多个链表组成的,邻接表的本质是...

fufang0303的博客 705

关于机器人精度的总结(重复精度和绝对精度区分)

机械臂是工业生产中的重要设备,在焊接码垛 以及 非 接触测量等 领域中有 着重要应 用。然而由于机械臂本体制造中存在机械制造公差装配误差导致的运动学参数误差以及电机转角与关节转角间减速比误差等,导致机械臂存在。因此需要对机械臂进行标定,提高机械臂的绝对定位精度。ABB系列某款机器人精度参数表。

大胡子大叔的专栏 1万+

基于DRU-HVDC的构网型海上风电场环流机理仿真复现

本文介绍了基于DRU-HVDC的构网型海上风电场环流机理仿真模型的构建方法。主要内容包括: 完整的Simulink模型结构,包含主模型文件GFM_DRU_Main.slx和配置脚本GFM_DRU_Setup.m 系统参数设置,包括基础频率(20Hz)、电压基准值(690V)、功率基准值(2MVA)等 四种仿真场景配置:电压不平衡、相位不平衡、阻抗不平衡和频率不平衡 风力发电机(WT)子系统的详细构建步骤,包含电压源、输出阻抗和测量模块 变压器和DRU整流器的参数设置 该模型可用于研究构网型风电场的环流机理。

huanghm88的专栏 262

PTA 7-11 关键活动

假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。

2401_83961434的博客 590

【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01

基于wrf-python处理wrf运行结果wrfout_d01

WW、forever的博客 5209

AOE网络的算法,活动的最早开始时间,最晚结束时间,关键活动,关键路径

AOE网络的关键活动计算,进而得到关键路径

cmdssd1的专栏 4万+

Python爬取上市公司年报并进行财务比率分析:基于异步爬虫与数据挖掘的实战

在当今数据驱动的投资时代,获取并分析上市公司财务数据对于投资者、分析师和研究人员至关重要。中国证监会指定的上市公司信息披露网站——巨潮资讯网,包含了所有A股上市公司的年报、季报及其他公告信息。本项目将展示如何使用Python最新技术栈爬取巨潮网的年报数据,提取关键财务指标,并进行深入的财务比率分析。本文将采用异步爬虫技术提高数据采集效率,使用现代解析库处理PDF和HTML文档,并结合pandas进行数据分析和可视化。整个过程将遵循合规合法的爬虫伦理,尊重网站robots.txt协议,设置合理的请求间隔。

2201_76125261的博客 666

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据结构基础—关键活动

08-图9 关键活动(30 分)假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开...

qq_25175067的博客 1031

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

使用C++实现关键路径(关键活动)

使用C++实现关键路径(关键活动)

Keep_Trying_Go的博客 1963

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

AOE网求关键路径(关键活动)

AOE网求关键路径(关键活动): AOE网求解关键路径,所需的是有向无环图,注意的是,只有一个源点,有一个汇顶点,然后关键路径不一定只有一条。注意,这里要理解: 顶点:事件 边:活动 还有四个数组下面有介绍: 代码如下: #include <stdio.h> #include <malloc.h> #define inf 330 #define max 50 typedef struct node{ int adjvex; int weight; //权值 struct

玩转Java 3220

7-11 关键活动 (关键路径)

假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系...

whisperlzw的博客 4030

关键活动题解

假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。

weixin_72525373的博客 421

pat 关键活动

pat 关键活动

qq_36723084的博客 741

08-图9 关键活动

08-图9关键活动(30point(s))假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程...

diaosuiwa6230的博客 94

求AOE网中的所有关键活动

一、拓扑排序 设G=<V,E>是一个具有n个顶点的有向图,V中的顶点序列v1,v2,v3,...,vn称为一个拓扑序列。若<vi,vj>是图中的一条边或者从顶点vi到顶点vj有路径,则在该序列中顶点vi必须排在顶点vj之前。 在一个有向图中找一个拓扑序列的过程称为拓扑排序。 用顶点表示活动,用有向边表示活动之间的优先关系的有向图称为顶点表示活动的网。 拓扑排序方法如...

xiezhi123456的博客 5543

关键活动(注释超详细!!!)

关键活动题目答案总结 题目 答案 #include<iostream> #include<queue> #include<vector> #include<set> using namespace std; struct Node{ int node,time; Node(int a,int b):node(a),time(b){ } };//后继节点 struct S{ int x,y,cnt; S(int a,int b,int c):x(

ljhsq的博客 1614
上一篇: 最短工期
下一篇: 有向图的广度优先遍历
Asssshzy
博客等级 码龄7年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值