0

次の数字を持つ配列があります

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

または、その件に関する他の注文。再帰を使用して数字のすべての可能な組み合わせを作成する必要がありますが、現在の数字でクラブ化された次の数字は、ハッシュマップによって指定された特定の数字からのみであるという条件を満たす必要があります。 {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 までのすべての可能な数字を作成する必要があります。助けてください!

4

1 に答える 1

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、および初期配列から作成されたセットである必要があります。これが戻ると、パス Set は可能なパスで満たされている必要があります。

私はこれをテストしておらず、バグとより洗練された解決策があります。

于 2013-08-08T07:40:06.327 に答える