1
Map<K,V<List<K>> graph = new HashMap<K,V<List<K>>();

これを使用して周期的な有向グラフを表すことに大きな障害はありますか?

編集:

これは、おそらく必要以上に混乱を招きました。これは RPG の会話グラフで、これまでに得たものです。これをより単純な形式にリファクタリングできるかどうかを判断しようとしていました。

NPC 用に初期化:

public interface ConversationGraphI {

    void init();

    Map<String, DialogueNodeI> getConversation();

    void setConversation(Map<String, DialogueNodeI> conversation);
}

応答オプション付きの会話の一部:

public interface DialogueNodeI {

    String getText();

    void setText(String text);

    List<ResponseChoiceI> getResponseChoices();

    void setResponseChoices(List<ResponseChoiceI> responseChoices);
}

マップ内の別のダイアログにループバックできる応答の選択肢:

public interface ResponseChoiceI {

    String getResponseText();

    void setResponseText(String responseText);

    String getDialogueKey();

    void setDialogueKey(String dialogueKey);
}
4

2 に答える 2

2

主な問題は、各エッジに関するデータを簡単に保存できない可能性があることだと思います。タイプ V のオブジェクトがそれを提供するかどうかによって異なります。それでも、明示的な Edge タイプを使用する方がよいという Andrei LED のコメントに同意します。

Map<K,Collection<Edge<K>>>

エッジ メタデータをまったく保存する必要がない場合は、さらに簡単にできます。

Map<K,Collection<K>>

オールインワン アプローチの代替として、ノード用とエッジ用の 2 つの個別のコレクションで表されるグラフを見てきました。N がノードの場合、次のようになります。

Collection<N>  // nodes
Collection<Edge<N>>  // edges between nodes
于 2011-09-19T20:12:45.733 に答える
0

キーを自然な順序で並べ替えるには、TreeMap を使用する必要があると思います。そうでなければ、それは今では間接グラフになるのではないでしょうか? それ以外に、直接グラフの他のすべての基準を尊重するかどうかは、そこに配置する Keys および Values オブジェクトに与える実際の実装によって異なります。

于 2011-09-19T19:21:32.833 に答える