2012-07-28 93 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