2013-08-08 2 views
0

У меня есть массив, который имеет следующие номерарекурсии с помощью HashMap

int[] arr = {2,4,3,1,5,6,0,7,8,9,10,11,12,13,14,15}; 

или любой другой заказ по этому вопросу. Мне нужно сделать все возможные комбинации чисел, используя рекурсию, но удовлетворяющую условию, что следующее число, связанное с настоящим, может быть только от конкретных чисел, заданных хэш-комбинацией: ex Когда рекурсия занимает 1 следующий номер может быть от {0,4,5,2,6} (от HaspMap), а затем, если я сделать 10, следующий номер может быть от {1,4,5} и так далее

static HashMap<Integer,Integer[]> possibleSeq = new HashMap<Integer,Integer[] >(); 
private static void initialize(HashMap<Integer,Integer[]> possibleSeq) { 
    possibleSeq.put(0,new Integer[]{1,4,5}); 
    possibleSeq.put(1,new Integer[]{0,4,5,2,6}); 
    possibleSeq.put(2,new Integer[]{1,3,5,6,7}); 
    possibleSeq.put(3,new Integer[]{2,6,7}); 
    possibleSeq.put(4,new Integer[]{0,1,5,8,9}); 
    possibleSeq.put(5,new Integer[]{0,1,2,4,6,8,9,10}); 
    possibleSeq.put(6,new Integer[]{1,2,3,5,7,9,10,11}); 
    possibleSeq.put(7,new Integer[]{2,3,6,10,11}); 
    possibleSeq.put(8,new Integer[]{9,4,5,12,13}); 
    possibleSeq.put(9,new Integer[]{10,4,5,8,6,12,13,14}); 
    possibleSeq.put(10,new Integer[]{7,6,5,9,11,15,13,14}); 
    possibleSeq.put(11,new Integer[]{6,7,10,14,15}); 
    possibleSeq.put(12,new Integer[]{8,9,13}); 
    possibleSeq.put(13,new Integer[]{8,9,10,12,14}); 
    possibleSeq.put(14,new Integer[]{9,10,11,13,15}); 
    possibleSeq.put(15,new Integer[]{10,11,14});  
} 

Примечание: я должен сделать все возможные числа, начинающиеся с цифры длиной от 1 до 10. Помощь!

ответ

0

Попробуйте что-то вроде этого, для начала:

void findPath(Set paths, Stack path, int[] nextSteps, Set numbersLeft) { 
    if (numbersLeft.isEmpty()) { 
     //Done 
     paths.add(new ArrayList(path)); 
     return; 
    } 

    for (int step:nextSteps) { 
     if (numbersLeft.contains(step)) { 
      // We can move on 
      path.push(step); 
      numbersLeft.remove(step); 
      findPath(paths, path, possiblePaths.get(step), numbersLeft); 
      numbersLeft.add(path.pop()); 
     } 
    }  
} 

Исходные значения должны быть пустой набор, и пустой стек, а-nextSteps идентичные вами исходного массива, а также набор, созданный из вашего исходного массива. Когда это возвращается, набор путей должен быть заполнен возможными путями.

Я не тестировал это, и есть ошибки, а также более элегантные решения.

Смежные вопросы