2012-07-28 123 views
1

我正在编写一个java程序来安排项目中的活动,同时考虑到资源限制(类似于MS项目,但更基本的课程)。当可用资源太少时,我使用优先级规则按特定顺序安排活动(以便可以首先安排最重要的活动)。在java中计算图(网络)中节点的数量

我安排的优先规则之一是“大多数总继任者”,它优先考虑具有最多“未计划”追随者的活动。我收录了一张照片,让你知道我在说什么(这不是我正在使用的项目的图片,因为它太大)。对于活动A,后继者的总数将是3(B,E,C)。

我有关于活动总数和所有活动的直接继任者的信息(二进制形式,如果追随者[2] [1] == 1例如,这意味着活动2是一个immedita追随者活动1),但我的主要问题是,我不知道如何从追随者的追随者和追随者的追随者获得信息,并且......因为我不知道我的图表有多“深” 。我已经在互联网上搜索了解决方案,但其中大部分似乎适用于二叉树(如二进制搜索),而我的网络则不是这样(某些活动有3个或更多的关注者,有些活动是共享的,... )。

有人可能有一个想法(或提示)我怎么能处理这个问题? 非常感谢! (而对于长的帖子对不起)

Example of a network

+2

这不是一棵树,是一个图。你有没有看到有两棵枝叶共享的树? – SJuan76 2012-07-28 09:17:36

+0

你是对的,我改变了话题和我的文字。感谢您的评论! – user1559345 2012-07-28 09:32:43

回答

0

使用已经计算节点,初始为空的设置。从根节点开始。对于当前节点的每个子节点,如果它尚未在集合中,则将其添加到集合中,递增计数器,然后应用相同的算法,使用相同的集合,并将子节点作为开始节点。

+0

我已经想到了类似的解决方案,但不会有不止一次计算的活动?例如,如果活动A,B和C具有类似的直接后继者(D),则活动D不计为3次而不是1次? – user1559345 2012-07-28 10:09:12

+0

算法中确实存在一个错误。我会更新我的答案。 Set的目标是避免这个问题。 – 2012-07-28 10:10:53