再帰的なメソッドで aint[]
に aを追加しようとすると、少し問題が発生します。別の関数で使用するサイズのList<int[]>
順列をすべて取得しています。これらの順列のそれぞれを前述のリストに追加したいと思います。ただし、すべての順列に int[] (shortestPath) を追加できるとは思えません。正直なところ、各配列の出力が機能する理由を知るには、再帰の経験が十分ではありませんが、リストに追加すると単純に追加されます最初の arr (パラメーターとして渡されたもの) 6 回。int[]
N
私のコードは次のとおりです。
public int counter = 0;
public List<int[]> shortestPaths = new ArrayList<int[]>();
public void permute(int[] arr, int startIndex) {
int size = arr.length;
if (arr.length == (startIndex + 1)) {
System.out.print("Permutation " + counter + " is: ");
for (int i = 0; i < size; i++) {
if (i == (size - 1)) System.out.print(arr[i] + "\n\n");
else System.out.print(arr[i] + ", ");
}
shortestPaths.add(arr);
counter++;
} else {
for (int i = startIndex; i < size; i++) {
int[] copy = arr.clone();
int tmp = copy[i];
copy[i] = copy[startIndex];
copy[startIndex] = tmp;
permute(copy, startIndex + 1);
//tmp = arr[i];
//arr[i] = arr[startIndex];
//arr[startIndex] = tmp;
copy = null;
}
}
}
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
permute(arr, 0);
System.out.print("\n\n\n\n");
for (int[] a : s.shortestPaths) {
System.out.println(a[0] + ", " + a[1] + ", " + a[2] + "\n\n");
}
PS - 印刷物は、データ構造の状態をすばやく確認するためのものです。もちろん、実装が完全に機能するようになると削除されます:) また、このコードは、マトリックス処理に関連するさらに多くの関数を持つクラスにネストされています。特にこの関数は、最短パス アルゴリズムのヘルパー関数です。
私よりも再帰をよく知っていて、喜んで助けてくれる人たちに、前もって感謝します!
Chris