【问题标题】:Guava Graph package: Method for testing if a undirected graph is a treeGuava Graph 包:测试无向图是否为树的方法
【发布时间】:2020-04-06 13:29:23
【问题描述】:

我想写一个函数来测试一个无向图是否是一棵树。
到目前为止,我正在使用这个:

Function<Graph<Integer>, Double> targetFunction = g -> {
    boolean isConnected = Graphs.reachableNodes(g, g.nodes().iterator().next()).equals(g.nodes());
    return isConnected && Graphs.hasCycle(g);
};

Guava 中是否已经有此方法的实现(未找到),如果没有,是否可以改进?

【问题讨论】:

    标签: java tree guava graph-theory


    【解决方案1】:

    你的实现有两个问题。

    • g.nodes().iterator().next() 返回图中的第一个节点 - n1。假设图是一棵树,n1 可能不是树的根。所以它的可达节点是所有节点的子集。
    • hasCycle 仅检测后边缘,但不检测前边缘或交叉边缘。检查the answer 找出区别。

    我无法从 guava graph api 中找到直接解决方案。它只提供对图数据结构、bfs和dfs的基本支持。

    这个问题,Determining whether or not a directed or undirected graph is a tree,展示了如何实现你想要的算法。

    【讨论】:

    • 好吧,抱歉,我应该明确指出该图是无向的。不过,您的观点在定向情况下是有效的。我的问题更多是关于是否有比我更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多