頂点は同じままですが、エッジが反対方向になるように、特定の有向グラフを逆にする必要があります。私のグラフは、頂点の ArrayList を含む Graph クラスで表され、各 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 が含まれている場合、5 の隣接リストに 1 を追加し、1 の隣接リストから 5 を削除することです。次に、ループが 5 に達すると、1' の隣接リストに 5 を追加し、5 の隣接リストから 1 を削除します。ループによって変更される前に、各リストの初期サイズを維持する必要があります。