G
Garfield83
Gast
Hallo,
Ich hätte ein Problem:
Ich möchte bei einer Eingabe 'n' alle Permutationen von 1:n rekursiv ausgeben lassen.
Ich hatte jetzt schon einen für mich recht viel versprechenden Ansatz.
Man führt ein array und einen Vector und nimmt sich immer aus dem Vector einen Wert und übergibt diesen Wert quasi an das Array, dann gibts einen rekursiven Aufruf.
So in der Theorie sollte das meiner Meinung nach auch funktionieren. Aber tuts leider nicht.
Hier mal mein Algorithmus, vielleicht hat ja jemand hierfür eine bessere Idee, oder kann den Fehler finden, der dazu führt, dass die for Schleife nicht weiterläuft. ((Bekomme einen indexoutof bounds Fehler))
Momentane Ausgabe:
Ich hätte ein Problem:
Ich möchte bei einer Eingabe 'n' alle Permutationen von 1:n rekursiv ausgeben lassen.
Ich hatte jetzt schon einen für mich recht viel versprechenden Ansatz.
Man führt ein array und einen Vector und nimmt sich immer aus dem Vector einen Wert und übergibt diesen Wert quasi an das Array, dann gibts einen rekursiven Aufruf.
So in der Theorie sollte das meiner Meinung nach auch funktionieren. Aber tuts leider nicht.
Hier mal mein Algorithmus, vielleicht hat ja jemand hierfür eine bessere Idee, oder kann den Fehler finden, der dazu führt, dass die for Schleife nicht weiterläuft. ((Bekomme einen indexoutof bounds Fehler))
Code:
import java.util.Arrays;
import java.util.Vector;
public class Permutation {
public static void permutation(int n){
int[] x= new int[n];
Vector<Integer> y = new Vector<Integer>();
for(int j=1;j<=n;j++){
y.addElement(j);
}
permute(n,x,y);
}
// es wird immer ein inthilfsarray übergeben mit einer Zahl gestrichen
// Also es wird immer eine Zahl aus y-> x verschoben
public static void permute(int n, int[] x,Vector<Integer> y){
for(int i=0; i<n; i++){
x[n-1]=y.elementAt(i);
// der comment dient hier nur dem bugtracking
System.out.println(i + " Missisippi");
Vector z= new Vector();
z=y;
z.removeElementAt(i);
// so hier muss aus y der Wert rausgelöscht werden
permute(n-1,x,z);
if(n==1){
System.out.println(Arrays.toString(x));
}
}
}
public static void main(String[] args){
permutation(3);
}
}
Momentane Ausgabe:
0 Missisippi
0 Missisippi
0 Missisippi
[3, 2, 1]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
at java.util.Vector.elementAt(Unknown Source)
at Permutation.permute(Permutation.java:18)
at Permutation.permute(Permutation.java:24)
at Permutation.permutation(Permutation.java:12)
at Permutation.main(Permutation.java:31)