私はこの問題を抱えています.与えられた順列からすべての組み合わせではなく、2つの位置を並べ替えた後に繰り返しなしで得られたものだけを生成する必要があります. これは、特定の順列の領域と呼ばれます。たとえば、生成したい 1234 を指定すると、次のようになります。
2134
3214
4231
1324
1432
1243
任意の順列の領域のサイズは n(n-1)/2 で、この場合は 6 つの組み合わせです。
今、私はこのプログラムを持っています.彼は私が望むものよりも少し多すぎます.
public class PossibleCombinations {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("Entrer a mumber");
int n=s.nextInt();
int[] currentab = new int[n];
// fill in the table 1 TO N
for (int i = 1; i <= n; i++) {
currentab[i - 1] = i;
}
int total = 0;
for (;;) {
total++;
boolean[] used = new boolean[n + 1];
Arrays.fill(used, true);
for (int i = 0; i < n; i++) {
System.out.print(currentab[i] + " ");
}
System.out.println();
used[currentab[n - 1]] = false;
int pos = -1;
for (int i = n - 2; i >= 0; i--) {
used[currentab[i]] = false;
if (currentab[i] < currentab[i + 1]) {
pos = i;
break;
}
}
if (pos == -1) {
break;
}
for (int i = currentab[pos] + 1; i <= n; i++) {
if (!used[i]) {
currentab[pos] = i;
used[i] = true;
break;
}
}
for (int i = 1; i <= n; i++) {
if (!used[i]) {
currentab[++pos] = i;
}
}
}
System.out.println(total);
}
}
問題は、このプログラムを修正して、必要な組み合わせのみを生成するプログラムにするにはどうすればよいかということです。