Permutacje
/* PermutacjeGT.java */
public class PermutacjeGT
{
static final int N = 3; // permutacje n-elementowe
private static int[] p = new int[N];
public static void main(String[] args)
{
generuj(0);
}
static boolean nieMa(int wyraz, int indeks)
{
for (int k = 0; k < indeks; k++)
if (p[k] == wyraz) return false;
return true;
}
static void generuj(int i)
{
if (i == N)
{
for (int k = 0; k < p.length; k++)
System.out.print(p[k] + " ");
System.out.println();
}
else
{
for (int j = 1; j <= N; j++)
{
if (nieMa(j,i))
{
p[i] = j;
generuj(i+1);
}
}
}
}
}
/*
static boolean nieMa(int wyraz, int indeks)
Metoda nieMa sprawdza, czy wsród elementów o numerach mniejszych od
indeks nie ma elementu o wartosci wyraz. Jesli element o wartosci wyraz
wystepuje wsród elementów o numerach mniejszych od indeks, to metod nieMa
zwraca wartosc false. Jesli element o wartosci wyraz nie wystepuje wsród
elementów o numerach mniejszych od indeks, to metoda nieMa zwraca wartosc
true.
Przyklad:
0 1 2
p -> [3][2][x]
nieMa(1,2) = true
nieMa(2,2) = false
nieMa(3,2) = false
static void generuj(int i)
Metoda generuj okresla dla i-tego wyrazu permutacji wartosc j z przedzialu
od 1 do N, o ile wartosci j nie ma wsród wyrazów o indeksach mniejszych od i,
a nastepnie przeprowadza te operacje dla kolejnego i+1 wyrazu permutacji.
Przy czym, wywolanie metody generuj z parametrem aktualnym i probuje okreslic
dla i-tego wyrazu permutacji wszystkie dozwolone wartosci j po kolei. Jesli
metoda generuj zostanie wywolana z parametrem aktualnym N, to na ekranie
zostanie wypisana wygenerowana permutacja.
Graf permutacji dla N = 3
__________ empty __________
/ | \
/ | \
1 2 3 i = 0
/ \ / \ / \
/ \ / \ / \
1,2 1,3 2,1 2,3 3,1 3,2 i = 1
| | | | | |
| | | | | |
1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 i = 2
public static void main(String[] args)
Generowanie permutacji rozpoczynamy od wyrazu z indeksem 0.
*/
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Press any key to continue...