AOE算法典例

您所在的位置:网站首页 下载一部电影需要多少空间 AOE算法典例

AOE算法典例

2024-07-17 23:52:37| 来源: 网络整理| 查看: 265

一、问题描述:

要完成一部电影需要很多环节,如下: 1、 项目启动到确定导演需要 1 个时间,已确定导演到完善细节需要 2 个时间,已经完善细节到开始拍摄需要 2 个时间。 2、 项目启动到确定演员需要 3 个时间,已确定导演到已确定演员需要 1 个时间,已确定演员到开始拍摄需要 2 个时间。 3、 项目启动到完成场地确认需要 5 个时间,完成演员确定到完成场地确认需要 1 个时间,完成场地确认到完善细节需要 1 个时间,完成场地确认到开始拍摄需要 2 个时间。

可以看出,每个环节的时间不同,且有着严格的先后关系,可以同时做多个工作,如何求出从项目启动到开始拍摄的最短时间呢?下面就是解决此问题的办法。

二、解决方法:

此问题很明显是一个寻找关键路径的问题,我们可以建立一个图的模型,将每一个顶点代表每一个环节,用有向边来表示两顶点之间的活动,边的权值就代表所需要的时间。 由此,我们也看画出关于此问题的带权有向图(AOE图):

在这里插入图片描述

我们能够很容易的找到关键路径为:项目启动->场地确认->完善细节->开始拍摄。即为: 在这里插入图片描述

我们可以计算出最短的时间为8个时间。

虽然对这种整体环节不是很多的情况下,我们能够用肉眼观察到,但是如果所需要的的环节很多,关系也较为复杂的情况时,我们无法较为容易的观察出最短的路径,这时我们自己要设计一个小程序,来解决这种问题,下面就是代码实现。

三、代码实现: 1、代码思路

首先考虑的是对于有向图的表示方法,由于涉及到权值,我们选择用邻接矩阵的方法对有向图的表示,若两顶点之间不连通,则相对应的坐标表示为无限大(代码中表示为一个很大的值),若存在,则对应坐标代表权值。 先将上述的各项环节转换成数字(即为数组下标)这样能更加容易的代码实现: 在这里插入图片描述

由此,我们可以得到上述问题的邻接矩阵: 在这里插入图片描述

再通过关键路径算法来求得关键路径与最短时间,下面是算法分析。

2、主要算法

首先是设置了一个函数来对邻接矩阵进行初始化,并将边权信息输入进去:

void Initialize() { int a,b,c; for(i = 0;i if(a == last) return; for(int i = 0;i if((e[a] + graph[a][i]) > e[i]) { e[i] = e[a] + graph[a][i]; } Getearly(i,last); } } }

同理,也能够得到最迟的时间,存入到l[i]数组中:

void Getlater(int a,int first) { if(a == first) return; for(int i = 0;i if(l[a] - graph[i][a] Initialize(); //初始化邻接矩阵 Getpath(); } void Initialize() { int a,b,c; for(i = 0;i int first,last; int k,f; printf("请输入开始的点和结束的点:\n"); scanf("%d%d",&first,&last); for(i = 0;i for(i = 0;i p[f++] = i; k = i; break; } } } printf("关键路径为:\n"); for(i = 0;p[i] != last;i++) { printf("%d->",p[i]); } /*输出关键路径 */ printf("%d\n",p[i]); for(;i > 0;i--) { time = time + graph[p[i-1]][p[i]]; //path所记录的下标对应矩阵的权值进行相加 } printf("此方案所花费的时间为:%d",time); } void Getearly(int a,int last) //得到每个节点的最早时间,存入到e[i]数组中 { if(a == last) return; for(int i = 0;i if((e[a] + graph[a][i]) > e[i]) { e[i] = e[a] + graph[a][i]; } Getearly(i,last); } } } void Getlater(int a,int first) //得到每个节点的最晚时间,存入到e[i]数组中 { if(a == first) return; for(int i = 0;i if(l[a] - graph[i][a]


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭