问题描述
1/已知有如下一组活动,每个活动都有其工作时间和所需人力,在保证活动前后顺序和不超过人力资源约束的前提下,求得所有活动完成的总共最短工作时间.已知参数如下:说明:活动序号j,工作时间pj,所需人力lj,前序活动Lj,优先权v(j)活动的优先权:j1234567891011v(j)1011793854621总的人力资源约束maxReaource为常量6,指的是同时工作的人力数量不能超过此常量以上数据和人力资源约束常量均为已知,活动序号不表示活动的执行顺序.2/求解假设为每个活动随机分配一个不重复的正整数为活动优先权,在两活动竞争执行位置时优先权高的竞争到此位置.(如活动2,3竞争执行时,由于活动3的优先权6>活动2的优先权5,所以3执行)说明:求得结果应该如下图j节点下标;s-正在处理下标v(j)活动j的优先权j*s中最大的优先权的活动s已排序活动最后一个活动的结束时间为253/算法:输入:节点的先后顺序,优先权,所需人力,工作时间输出:最后一个活动的结束时间beginintm=10;//活动的数量Task[]processing=newTask[m];//正在处理活动集合Task[]scheduled=newTask[m];//已排序活动集合intstartTime=0;//初始化活动开始时间intfinishTime=0;//初始化活动结束时间intj=0;//活动下标intmaxReaource=6;while(j<m)do把后序节点加入正在处理活动集合;选择此集合中优先权最大的一个活动;活动j的最早开始时间为它所有前序任务的最晚完成时间;活动j的开始时间为最小的f,f满足(1)最早开始时间<=f(2)在时间l内可用资源数量<=maxHead(所需人力)l=f,f+1,…f+processing_time;活动j的结束时间为它的开始时间+它的处理时间;将此活动加入到已排序活动集合中;在正在处理活动集合中删除此活动;j=j+1;endoutput最后一个活动的完成时间end4/一些定义:活动类定义如下:publicclassTask{privateint_task_id;privatestring_task_name;privateint_rpoject_id;privateint_task_type;privateint_task_lines;privateint_processing_time;privateint_max_head;privateTask[]_pre_tasks;privateint_priority;privateint_employee_id;privateint_cost_on_task;privateint_start_time;privateint_finish_time;}publicclassTask_pre{privateint_task_id;privateint_task_pre_id;}以上两个类的数据都保存在SQLServer数据库的数据表之中
解决方案
解决方案二:
迷糊,顶
解决方案三:
看着就有点迷!帮顶吧。
解决方案四:
用树呢帮顶下
解决方案五:
的确是复杂了点,但是很有挑战,也挺有难度,还恳请高手指教
解决方案六:
google"图的宽度优先搜索".也就是用一个队列,依次遍历同层节点.
解决方案七:
何不转换成立体几何?最后求得是体积,也就是时间了
解决方案八:
怎么感觉有点运筹学的意思?有点像优化,都忘了。。。
解决方案九:
路由上的寻址算法叫做最小红点集算法。
解决方案十:
代码嘛,自己写咯。。
解决方案十一:
老王就是算法不会写才请教的我是初学者还请多指教
解决方案十二:
shrineraingoogle"图的宽度优先搜索".路由上的寻址算法叫做最小红点集算法。你们能提供更详细些的说明吗?多谢