拼图解算器

时间:2013-05-07 20:06:37

标签: java algorithm stack-overflow puzzle

好的,所以我有一个3 x 3曲线锯拼图游戏,我正在编写,我坚持解决方法。

public Piece[][] solve(int r, int c) {
    if (isSolved())
        return board;
    board[r][c] = null;
    for (Piece p : pieces) {
        if (p.equals(prev[r][c])) {
            System.out.println("Hello");
            break;
        }
        if (tryInsert(p, r, c)) {
            pieces.remove(p);
            System.out.println("why");
            break;
        }
    }
    if (getPieceAt(r, c) != null)
        return solve(nextLoc(r, c).x, nextLoc(r, c).y);
    else {
        if (prev[prevLoc(r, c).x][prevLoc(r, c).y] == null)
            prev[prevLoc(r, c).x][prevLoc(r, c).y] = getPieceAt(
                    prevLoc(r, c).x, prevLoc(r, c).y);
        prev[r][c] = null;
        pieces.add(getPieceAt(prevLoc(r, c).x, prevLoc(r, c).y));
        return solve(prevLoc(r, c).x, prevLoc(r, c).y);
    }
}

我知道我没有提供有关这个谜题的更多信息,但我的算法无论具体细节如何都应该有效。我已经测试了所有辅助方法,pieces是所有未使用的List的{​​{1}},Piece尝试在所有可能的方向插入该块,如果是可以插入,它会。 tryInsert的想法是阻止程序一遍又一遍地通过相同的组合。

不幸的是,当我测试它时,我得到一个prev。怎么了?

0 个答案:

没有答案