说明:我开始未经过的缘由:输出顺序的问题。html
题目原文:任务开始的交接点编号小者优先,起点编号相同时,与输入时任务的顺序相反。
对活动,起始交接点相同的状况下,在输入任务时,后输入的先输出。个人求解方法是整了个结构体封装起始交接点、终止交接点、输出次序编号,并对结构体数组排序。具体参考文献2。java
说明:
1 终点的肯定,出度为0为终点为终点。
2 多终点,初始化时,每一个终点的最晚完成时间,应当为项目最大完成时间。针对这一点,下面有一个对应的测试样例。本测试样例来自文献3。数组
输入样例 7 6 1 2 4 1 3 3 2 4 5 3 4 3 5 7 5 6 7 2 输出样例 9 1->2 2->4
3 一个顶点,能够入队,或者说能够被标记为已经访问的前提条件是:它的出度为0。
具体来讲,更新一个顶点的最晚完成时间时,出度减1,并判断它是否能够入队。求解最晚完成时间部分伪代码以下。本部分参考文献2。测试
Vertex v = 出队一个顶点; for(v的每一个未访问的、且是v的前驱顶点的顶点) { 更新最晚完成时间; 当前顶点出度减1; if(当前顶点出度 == 0) { 入队当前顶点; } }
一个比较好的测试样子以下。本测试样例来自文献4。.net
输入样例 11 14 1 2 4 1 3 3 2 4 5 3 4 3 4 5 1 4 6 6 5 7 5 6 7 2 8 3 7 9 3 7 9 10 6 4 10 2 10 6 5 6 11 4 输出样例 21 3->4 4->10 6->11 8->3 9->3 10->6
[1] https://pintia.cn/problem-set... (7-11 关键活动)
[2] https://blog.csdn.net/rxq2008... (7-11 关键活动(一) - A Little Programmer's Base - CSDN博客)
[3] https://blog.csdn.net/qq_2643... (08-图9 关键活动 (30分) - master-dragon的专栏 - CSDN博客)
[4] http://www.voidcn.com/article...code