1

我有一个大的HashMap<String,Set<String>>,这样说:

    {INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING],
 INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING],
 CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]}

这实际上对应于图结构,这意味着每个键与其值集之间存在边。我想遍历每个链接并找到从初始节点可到达的所有节点作为我的键的值集。

喜欢,

INDIANBATSMAN=[INDIAN,LIVING,THING,CRICKETER,PERSON]

完成这项工作的最有效方法应该是什么?(目前,我正在将其转换为邻接矩阵,因为我的地图很大,所以效率非常低。)

4

1 回答 1

4

您当前的表示 ( Map<String, Set<String>>) 称为邻接表,非常适合标准遍历算法,例如广度优先或深度优先。

这样的事情应该做:

visited = empty set
q = empty list
q.add(startNode)
visited.add(startNode)
while (q is non-empty)
    Node n = q.removeFirst()
    process(n)
    Set<String> children = yourMap.get(n)
    for (Node child : children)
        if (! visited contains child)
            visited.add(n)
            q.add(child)
于 2012-04-18T05:21:54.270 回答