Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
1.8 kB
1
Indexable
Never
import java.util.Arrays;

public class SinhHoanVi {
    public static void main(String[] args) {
        int[] mang = {1, 2, 3}; // Thay đổi mảng theo nhu cầu của bạn
        int[][] maTranHoanVi = sinhVaLuuHoanVi(mang);

        // In ra ma trận hoán vị
        for (int[] hoanVi : maTranHoanVi) {
            System.out.println(Arrays.toString(hoanVi));
        }
    }

    public static int[][] sinhVaLuuHoanVi(int[] mang) {
        int n = mang.length;
        int[][] maTranHoanVi = new int[factorial(n)][n];

        // Sinh hoán vị và lưu vào ma trận
        int index = 0;
        permuteAndStore(mang, 0, maTranHoanVi, index);

        return maTranHoanVi;
    }

    private static void permuteAndStore(int[] mang, int index, int[][] maTranHoanVi, int maTranIndex) {
        if (index == mang.length - 1) {
            // Copy hoán vị vào ma trận
            System.arraycopy(mang, 0, maTranHoanVi[maTranIndex], 0, mang.length);
            maTranIndex++;
        } else {
            for (int i = index; i < mang.length; i++) {
                // Hoán đổi phần tử tại vị trí index và i
                int temp = mang[index];
                mang[index] = mang[i];
                mang[i] = temp;

                // Đệ quy để sinh hoán vị tiếp theo
                permuteAndStore(mang, index + 1, maTranHoanVi, maTranIndex);

                // Hoàn ngược lại hoán vị để thử các trường hợp khác
                temp = mang[index];
                mang[index] = mang[i];
                mang[i] = temp;
            }
        }
    }

    private static int factorial(int n) {
        if (n <= 1) {
            return 1;
        }
        return n * factorial(n - 1);
    }
}
Leave a Comment