我必须反转给定的有向图,以便顶点保持不变,但边的方向相反。我的图用一个 Graph 类表示,它包含一个顶点的 ArrayList,每个 Vertex 对象都有它的编号和它的相邻顶点的 ArrayList。我的代码给出了错误的答案,因为在循环的每次迭代中,顶点的相邻列表的大小都会发生变化。如何修复我的代码?
public void reverse() {
ArrayList < Vertex > adjacentOfi = new ArrayList < Vertex > ();
int k;
for (int i = 1; i < verticesSize; i++) {
adjacentOfi = vertices.get(i).getAdjacent();
for (int j = 0; j < adjacentOfi.size(); j++) {
k = adjacentOfi.get(j).getNumber();
adjacentOfi.remove(j);
vertices.get(k).getAdjacent().add(vertices.get(i));
}
}
}
这是顶点类
public class Vertex {
private int number;
private boolean marked;
private int finishingTime;
private ArrayList<Vertex> adjacent;
public Vertex(int num) {
this.number = num;
this.marked = false;
this.finishingTime = 0;
this.adjacent = new ArrayList<Vertex>();
}
}
加上当然它是吸气剂和二传手。问题是当循环从顶点 1 开始,并且它的邻接列表包含顶点 5 时,它将 1 添加到 5 的邻接列表中并从 1 的邻接列表中删除 5。下一次,当循环到达 5 时,它将 5 添加到 1'a 邻接表中,并从 5 的邻接表中删除 1。在循环修改它之前,我需要保持每个列表的初始大小。