转置图

时间:2010-05-08 13:18:57

标签: java graph

如何在java中编写程序来查找图G的转置,其中程序的输入和输出表示为邻接列表结构。 例如:

  

输入:1> 2> 3> 4> 1

     

输出:1> 4> 3> 2>

2 个答案:

答案 0 :(得分:5)

假设给定了一个图GV中的顶点Vertices(G)G[V]V的邻接列表。

在伪代码中:

FUNCTION transpose(Graph G) : Graph
   INIT Graph GT

   FOR EVERY Vertex U IN Vertices(G) DO
      FOR EVERY Vertex V IN G[U] DO
          append(GT[V], U)

   RETURN GT

这是O(|V|+|E|)


Java实现

以下实现紧跟伪代码。唯一添加的是对null的{​​{1}}检查。顶点标签为append,图形表示为String

Map<String,List<String>>

警告:这个核心算法既不保留顶点也不保留入边缘,但这只需要一个简单的处理。

答案 1 :(得分:0)

公共图getTransposedGraph(){

    List<Vertex> transposedVertexList = new ArrayList<>();
    for (Vertex v : this.vertexList) {
        transposedVertexList.add(v);
    }
    for (Edge e : this.edgeList) {
        transposedVertexList.get(transposedVertexList.indexOf(e.getTargetVertex()))
                .addNeighbour(e.getSourceVertex()); //Swap the vertexes of edge by making source as neighbour of Target vertex 
    }
    Graph transposedGraph = new Graph(transposedVertexList, edgeList);

    return transposedGraph;
}