package PAZ1b.cvicenie06;
import java.util.Arrays;
public class GeneratorBezOpakovania {
/**
* Pole v ktorom generujeme variacie
*/
private int[] pole;
/**
* Pole, v ktorom uchovavame, ci sa hodnota i (i=1..n) nachadza v poli pole.
*/
private boolean[] uzBolo;
/**
* Urcuje velkost mnoziny, z ktorej vytvarame variacie bez opakovania ({1, ...,
* n})
*/
private int n;
private int[] cisla;
private void spracuj() {
// System.out.println(Arrays.toString(pole));
int[] coIdemVypisat = new int[n];
for (int i = 0; i < pole.length; i++) {
coIdemVypisat[i] = cisla[pole[i]];
}
// for (int i = 1; i < coIdemVypisat.length; i++) {
// if (coIdemVypisat[i] % coIdemVypisat[i - 1] == 0 || coIdemVypisat[i - 1] % coIdemVypisat[i] == 0) {
// System.out.println("zla "+ Arrays.toString(coIdemVypisat));
// return;
// }
// }
//
System.out.println(Arrays.toString(coIdemVypisat));
}
private void generuj(int odIndexu) {
// Ak sme vygenerovali vsetky hodnoty v poli, tak pole vypiseme
if (odIndexu == pole.length) {
spracuj();
return;
}
for (int i = 0; i < n; i++) {
// Cislo i ulozime do pola, iba ak sa este nenachadza na indexoch
// 0..(odIndexu-1)
if (!uzBolo[i]) {
if (odIndexu >= 1) {
int naAktPoz = cisla[i];
int naPredchPoz = cisla[pole[odIndexu-1]];
if(naAktPoz % naPredchPoz == 0 || naPredchPoz % naAktPoz == 0) {
continue;
}
}
// Poznacime si pridanie hodnoty i do pola
uzBolo[i] = true;
pole[odIndexu] = i;
// Generujeme variacie bez opakovania od indexu odIndexu+1
generuj(odIndexu + 1);
// pole[odIndexu] = 0;
// Poznacime si odobratie hodnoty i z pola
uzBolo[i] = false;
}
}
}
public void generuj() {
generuj(0);
}
public GeneratorBezOpakovania(int[] cisla) {
this.cisla = cisla;
// Ulozime si parameter n
this.n = cisla.length;
// Vytvorime pole, do ktoreho budeme generovat variacie
pole = new int[cisla.length];
// Vytvorime pole s indexami 0..n, v ktorom si pre cisla v rozsahu 1..n
// budeme pamatat, ci sme ich pouzili
uzBolo = new boolean[n];
}
public static void main(String[] args) {
int[] cisla = { 8, 4, 3, 5 };
GeneratorBezOpakovania g = new GeneratorBezOpakovania(cisla);
g.generuj();
}
}