PAT测试题目“关键活动”

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…

    原文作者:奇迹之诱惑
    原文地址: https://segmentfault.com/a/1190000020389295
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞