2016-03-04 3 views
0

я хочу написать метод рекурсии, который печатает все возможные меры для этих чисел, целые числа от 1 до 9Как найти все возможные номера с помощью метода рекурсии

расположен случайным образом в сетке из трех строк и три колонка например:

6 2 1 

5 4 7 

3 9 8 

Извините, у меня нет никакого кода, потому что это очень сложно для меня.

public class Test { 

public static void main (String[] args){ 
    String x = "123456789"; 
    System.out.println(test(x,0)); 


} 
public static String test(String x , int y){ 

    if(x.length()==1)return ""; 

    return x.charAt(y)+test(x.substring(y),y); 
} 
+0

Возможный дубликат [Алгоритм для поиска следующей большей перестановки заданной строки] (http://stackoverflow.com/questions/1622532/algorithm-to-find-next-greater-permutation-of-a-given-string) – Prune

+0

Если вы ищете SO для «перестановок массива Java», вы найдете множество общих решений этой проблемы. – Prune

ответ

0

Есть много способов реализации что-то вроде этого, это один из примеров. Я буду использовать int[] вместо String ради удобства:

public static void main(String[] args) { 
    nextPermutation(new int[9], 0, new boolean[9]); 
} 

public static void nextPermutation(int[] perm, int index, boolean[] alreadyUsed) { 
    if(index == perm.length) { 
     //the permutation is complete 
     //you can store it or print it 
    } else { 

     for(int i = 0 ; i < alreadyUsed.length ; i++) { 
      if(alreadyUsed[i]) continue; 

      perm[index] = i+1; 

      boolean[] newAlreadyUsed = Arrays.copyOf(alreadyUsed, alreadyUsed.length); 
      newAlreadyUsed[i] = true; 
      nextPermutation(Arrays.copyOf(perm, perm.length), index+1, Arrays.copyOf(newAlreadyUsed, newAlreadyUsed.length)); 
     } 
    } 
} 

Это будет генерировать все возможные комбинации 1-9. Идея алгоритма состоит в том, что вы отслеживаете, какие цифры вы уже использовали, пропустите цикл и выберите все доступные цифры.

Обратите внимание, что очень важно, чтобы передать копии из perm и alreadyUsed, в противном случае вы будете просто пройти один и тот же массив и перезаписывает предыдущие перестановки.

0

передать значения массиву, рандомизировать и создать цикл для генерации матрицы. цикла: сделать общий цикл, начиная генерировать матрицу с i0, j0 нравится позиция i1, j1 из matrixand добавить значение массива

int j = 0; 
for(int i = 0; i <= YOURARRAY.length(); i++) 
    { 
System.out.println( i POSITIONOFARRAY ); 
j+1 
    } 
Смежные вопросы