私はこのコードをインターネットからコンピューターへの特定のベクトルのすべての可能な順列を見つけました。
import java.util.Vector;
class Permute {
static int count = 0;
public static void permute(Vector unvisited, Vector visited) {
if ( unvisited.isEmpty() ) {
System.out.println("Permutation: "+visited);
count++;
}
else {
//System.out.println("Trace: "+visited+" "+unvisited);
int l = unvisited.size();
for(int i = 0; i<l; i++) {
String next = String.valueOf(unvisited.remove(i));
visited.add(next);
permute(unvisited,visited);
unvisited.add(i,next);
visited.remove(next);
}
}
}
public static void main(String[] args) {
Vector objects = new Vector();
objects.add(1);
objects.add(5);
objects.add(8);
permute(objects, new Vector() );
System.out.println(count+" Permutationen gefunden");
}
}
Buコードと命令の流れを理解するのに小さな問題があります。私が見逃しているのは、これらの2つの行が呼び出されたときです
unvisited.add(i,next);
visited.remove(next);
permute(..)
私が見るように、それらに到達する前に再帰関数があります!