1

リソースの制限を考慮して、プロジェクトからのアクティビティをスケジュールするプログラムをJavaで作成しています(MSプロジェクトに似ていますが、より基本的なコースです)。利用可能なリソースが少なすぎる場合、優先ルールを使用して特定の順序でアクティビティを配置します (最も重要なアクティビティが最初にスケジュールされるように)。

私がスケジュールしている優先度ルールの 1 つは、「スケジュールされていない」フォロワーが最も多いアクティビティに優先度を与える「最も合計の後継者数」です。私が話していることを理解してもらうために写真を含めました (大きすぎるため、使用しているプロジェクトの写真ではありません)。アクティビティ A の場合、後続の合計数は 3 (B、E、C) になります。

アクティビティの総数と、すべてのアクティビティの直後の後続アクティビティに関する情報があります (たとえば、フォロワー[ 2 ][ 1 ]==1 の場合、これはアクティビティ 2 がアクティビティ 1 の即時フォロワーであることを意味します)。しかし、私の主な問題は、フォロワーのフォロワーとフォロワーのフォロワーのフォロワーから情報を取得する方法がわからないことです...グラフの「深さ」がわからないためです。私はすでにインターネットで解決策を検索しましたが、それらのほとんどは二分木 (二分探索など) に適用されるようですが、これは私のネットワークには当てはまりません (一部の活動には 3 人以上のフォロワーがいて、一部の活動は共有されています... )。

誰かがこの問題をどのように処理できるかについてのアイデア (またはヒント) を持っていますか? よろしくお願いします!(そして長文失礼しました)

ネットワークの例

4

1 に答える 1

0

既にカウントされたノードのセットを使用します。最初は空です。ルート ノードから開始します。現在のノードの各子について、まだセットにない場合はセットに追加し、カウンターをインクリメントしてから、同じセットで同じアルゴリズムを適用し、子を開始ノードとして適用します。

于 2012-07-28T09:36:51.123 に答える