Я хочу сгенерировать все возможные перестановки матрицы с помощью рекурсии. Например, матрица 2x2 будет иметь 24 возможности.Все возможные перестановки матрицы NxN в Java
1 2 1 2 1 3 1 4
3 4, 4 3, 2 4, 2 3....24 possibilities.
Вот мой код. Логика выглядит прекрасно, но я могу получить только четыре разные возможности. Надеюсь, кто-то может помочь мне в этом.
public class NewClass
{
public static int LENGTH=2,count=0;
public static int check_if_array_is_fully_filled(int[][] a)
{
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a.length;j++)
{
if(a[i][j]==0)
{
return 0;
}
}
}
return 1;
}
public static int[][] initialize_all_zeros(int[][] a)
{
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a.length;j++)
{
a[i][j]=0;
}
}
return a;
}
public static void display(int[][] a)
{
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a.length;j++)
{
System.out.print(a[i][j] + " ");
}
System.out.println();
}
System.out.println("********");
count++;
}
public static void generate(int[][] a, int value_to_enter, int done)
{
if(done == 0)
{
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a.length;j++)
{
if(a[i][j] == 0)
{
a[i][j]=value_to_enter;
value_to_enter++;
int v = check_if_array_is_fully_filled(a);
if(v == 1)
{
done = 1;
}
else
{
generate(a,value_to_enter,0);
}
}
}
}
}
if(done == 1)
{
display(a);
}
}
public static void main(String[] agrs)
{
int[][] a;
for(int i=0;i<LENGTH;i++)
{
for(int j=0;j<LENGTH;j++)
{
a = new int[LENGTH][LENGTH];
a = initialize_all_zeros(a);
a[i][j]=1;
generate(a,2,0);
}
}
System.out.println(count);
}
}
Пожалуйста, начните с предоставления значимых имен вашим переменным и функциям, чтобы код можно было прочитать. – njzk2
2x2 = 4. 4! = 24. перестановки (n) = n! – ControlAltDel
Этот вопрос кажется не по теме, потому что это прежде всего комбинаторика и перестановки – ControlAltDel