1 测试点:单起点和单终点,2条关键路径
说明:我开始未通过的原因:输出顺序的问题。
题目原文:任务开始的交接点编号小者优先,起点编号相同时,与输入时任务的顺序相反。
对活动,起始交接点相同的情况下,在输入任务时,后输入的先输出。我的求解方法是整了个结构体封装起始交接点、终止交接点、输出次序编号,并对结构体数组排序。具体参考文献2。
2 测试点:多起点和多终点
说明:
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。
输入样例
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
3 参考文献
[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…