我正在努力解决以下问题,并用C ++实现解决方案。
让我们假设我们有一个定向加权图G =(V,A,w),P是一组人。
我们收到许多查询,每个查询都给出一个人p以及两个顶点s和d,并要求计算人p的s和d之间的最小加权路径。一个人可以有多个路径。
所有查询结束后,我得到一个数字k <= | A |我应该给出k条弧线,以使使用k条弧线中至少一个弧线的人数达到最大(这是最大覆盖率问题)。
为解决第一部分,我使用priority_queue实现了Djikistra算法,并计算了s和d之间的最小权重。 (这是个好方法吗?)
要解决第二部分,我为每个弧存储使用该弧的一组人员,并使用贪婪算法来计算该组弧(在每个阶段,我选择了最多未发现人员使用的弧)。 (这是个好方法吗?)
最后,如果我的算法很实用,如何在C ++中有效地实现它们?