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 的对象是否会给你。不过,我同意 Andrei LED 的评论,即最好使用明确的 Edge 类型:

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

如果您根本不需要存储边缘元数据,那么您可以更简单:

Map<K,Collection<K>>

作为一体化方法的替代方案,我看到了由两个单独的集合表示的图,一个用于节点,一个用于边。如果 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 回答