【问题标题】:How to do a toposort; creating in-degrees如何进行拓扑排序;创建入度
【发布时间】:2012-11-24 00:45:27
【问题描述】:

我正在为学校作业构建图结构。它目前表示为邻接列表:我正在使用哈希图,其中键是图的节点(顶点),值是边列表(包含源节点和目标节点指针以及“权重”的对象) 与关键节点关联。

我的下一个任务是编写拓扑排序,但我卡住了。我认为最好的开始方法是给我的每个节点对象一个整数字段来表示入度(导致节点的边的数量),但我想不出一种方法来将它分配给我的所有节点鉴于我已经拥有的。

有什么建议吗?

【问题讨论】:

    标签: java graph topological-sort


    【解决方案1】:

    我建议您也创建 Node.js 的概念。这意味着除了您是 Edge 对象之外,您还将拥有 Node 对象,更好的建模总是可以帮助您更快地解决问题。在这种情况下,使用 Node 定义的 HashMap 有一个键 Integer 会有所帮助,因为您可以在 Node 实例中存储其他信息。

    但是,如果您想要/需要保持当前结构,为了知道有多少条边通向给定节点,您必须遍历 HashMap entrySet 的各种值(根据您所说的将是边缘列表)并查看哪些边缘具有您要查找的节点具有目标节点,但此信息必须存储在辅助结构中(例如有另一个映射)

    【讨论】:

    • 感谢您的回复!我应该进一步说明,我实际上已经有一个 Node 对象;这些节点是我的 HashMap 中的键。
    • 那么你为什么不做以下事情:还要创建 Graph 的概念,该对象在内部具有你已经拥有的 HashMap,但作为它的 API 的一部分还包含方法 addEdge(Node src, Node dst,int 重量)。每次调用 addEdge 来创建边缘对象并插入到 hashMap 时,都会增加 dst Node 对象内的一个字段,让您知道有多少边缘到达该节点。
    • 太棒了!谢谢,我现在有一个有效的拓扑排序。
    • 不客气!如果你觉得我已经回答了你的问题,你应该接受它:)
    猜你喜欢
    • 2023-01-19
    • 2014-10-03
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多