如何在java中编写程序来查找图G的转置,其中程序的输入和输出表示为邻接列表结构。 例如:
输入:1> 2> 3> 4> 1
输出:1> 4> 3> 2>
答案 0 :(得分:5)
假设给定了一个图G
,V
中的顶点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|)
。
以下实现紧跟伪代码。唯一添加的是对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;
}