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

下面是我的代码:

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


有人可以建议一种将图形转换为其转置并保持基础接口相同(MutableValueGraph)的好方法吗?有什么办法吗?如果没有,我很乐意更改底层接口。

最佳答案

您应该查看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);

09-11 09:02