使用Google Guava Graph API进行图表转置

时间:2018-03-22 09:21:07

标签: java graph guava strongly-connected-graph

我正在使用Google Guava Graph API实现Kosaraju算法,但目前仍在使用标准guava API获取MutableValueGraph的转置。

以下是我的代码:

MutableValueGraph<GraphNode,Integer> graph = ValueGraphBuilder.directed()
    .allowsSelfLoops(true)
    .build();

有人可以建议一种将图形转换为转置的好方法,保持底层接口相同(MutableValueGraph)吗?有没有办法做到这一点?如果没有,我很乐意改变底层界面。

1 个答案:

答案 0 :(得分:2)

您应该查看Graphs帮助程序类,其中包含一组transpose方法,特别是Graphs#transpose(ValueGraph),其中

  

返回图形视图,每个边的方向(如果有)都反转。所有其他属性保持不变,对图表的进一步更新将反映在视图中。

请注意,返回的视图本身不可变(它是ValueGraph),所以如果你想要变换转置图,你必须自己复制它的值:

// to obtain a transposed view:
final ValueGraph<String, Integer> transposed = Graphs.transpose(graph); 
// to make a mutable copy of transposed graph:
final MutableValueGraph<String, Integer> transposedMutable = Graphs.copyOf(transposed);