如何使用拓扑排序解决此任务?

时间:2015-08-27 10:11:15

标签: topological-sort

项目中有N个模块。

每个模块

(i)完成时间以小时数(Hi)表示,可能取决于其他模块。如果模块x依赖于模块y,则需要在x之前完成y。项目经理,要求您尽早交付项目。提供完成项目所需时间的估计。

输入格式:

第一行包含T,测试用例数。

对于每个测试用例:第一行包含N个模块数。接下来的N行,每行包含:(i)模块ID(Hi)完成模块所需的小时数(D)我依赖的模块ID集合 - 由空格分隔的整数。

输出格式:

输出交付项目所需的最少小时数。

Input: 1

5  
1 5  
2 6 1  
3 3 2  
4 2 3  
5 1 3 

output: 16

我知道问题与拓扑排序有关。但是不知道如何找到总小时数。

1 个答案:

答案 0 :(得分:0)

创建有向图G如果a依赖于b将G中的有向边从b添加到G上的应用拓扑排序它可以说我们将它存储在名为TOPO []的数组中,初始化时间= H(0) 现在从第二个元素开始在TOPO数组上运行一个循环。

检查TOPO [i]是否依赖于TOPO [i-1]如果是这样我们必须一个接一个地执行它们,所以添加他们的任务时间

unread

如果TOPO [i]不依赖于TOPo [i-1]那么我们可以一起执行它们,因此最多可以完成任务时间

                time=time+H(i)

循环结束后变量时间将有你的答案

" 分别为每个组件执行此操作并采用所有

的最大值