E voila' ho trovato tutte le soluzioni!!:
codice:
package esercizi.ese_4;
import java.io.PrintStream;
import java.nio.Buffer;
import java.util.StringTokenizer;
/**
*
* @author mau2
*/
public class TryPermutation {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int [] numbers = {1, 2, 3, 4};
int [][] INTpermutazioni;
String[] STRpermutazioni;
INTpermutazioni = PermutaInt.permuta( numbers );
for (int i = 0; i < INTpermutazioni.length; i++) {
for (int j = 0; j < INTpermutazioni[i].length; j++) {
System.out.print(INTpermutazioni[i][j] + " ");
}
System.out.println();
}
STRpermutazioni = PermutaPhrase.permuta("il mio gatto");
//System.out.println(STRpermutazioni.length);
for (int i = 0; i < STRpermutazioni.length; i++) {
System.out.print(STRpermutazioni[i]);
System.out.println();
}
//scrittura dati su file...
}
private static class PermutaInt {
static int [][] p;
static int index = 0;
public static int[][] permuta(int [] number){
p = new int[factorial(number.length)][number.length];
generaPermutazioni(number, 0);
return p;
}
public static void generaPermutazioni(int[] B, int estremoinferiore) {
int temp;
// stampa permutazione attuale
if (estremoinferiore == B.length-1) {
for (int j = 0; j < B.length; j++){
p[index][j] = B[j];
}
index++;
}
for (int i = estremoinferiore; i < B.length; i++) {
temp = B[estremoinferiore];
B[estremoinferiore] = B[i];
B[i] = temp;
generaPermutazioni(B, estremoinferiore + 1);
temp = B[estremoinferiore];
B[estremoinferiore] = B[i];
B[i] = temp;
}
}
}
private static class PermutaPhrase{
static String [] strReturned;
static String [][] tmpStr;
static int index = 0;
public static String[] permuta(String str){
StringTokenizer tok = new StringTokenizer(str);
int countToken = tok.countTokens();
tmpStr = new String[factorial(countToken)][countToken];
//intanto popoliamo il primo indice dell'array bidimensionale
//con la striga str passata come argomento
//anche se tale popolamento verra' sovrascritto serve per passare l'array
//monodimenrionale al metodo generaPermutazioni
for (int i = 0; i < countToken; i++){
tmpStr[0][i] = tok.nextToken();
}
generaPermutazioni(tmpStr[0], 0);
//adesso popoliamo l'array monodimensionale con tutte le permutazioni
StringBuffer [] buffer = new StringBuffer[factorial(tmpStr[0].length)];
strReturned = new String[factorial(tmpStr[0].length)];
for (int i = 0; i < buffer.length; i++) {
buffer[i] = new StringBuffer();
}
for (int index = 0, i = 0; i < tmpStr.length; i++, index++) {
for (int j = 0; j < tmpStr[i].length; j++) {
buffer[index].append(tmpStr[i][j] + " ");
}
}
for (int i = 0; i < buffer.length; i++) {
strReturned[i] = buffer[i].toString();
}
return strReturned;
}
public static void generaPermutazioni(String[] B, int estremoinferiore) {
String temp;
// stampa permutazione attuale
if (estremoinferiore == B.length-1) {
for (int j = 0; j < B.length; j++){
tmpStr[index][j] = B[j];
}
index++;
}
for (int i = estremoinferiore; i < B.length; i++) {
temp = B[estremoinferiore];
B[estremoinferiore] = B[i];
B[i] = temp;
generaPermutazioni(B, estremoinferiore + 1);
temp = B[estremoinferiore];
B[estremoinferiore] = B[i];
B[i] = temp;
}
}
}
private static int factorial(int num){
int count = 1;
for (int i = 2; i <= num; i++) {
count *= i;
}
return count;
}
}