好的,所以我有一个正在编写的 3 x 3 jig saw 益智游戏,我被困在解决方法上。
public Piece[][] solve(int r, int c) {
if (isSolved())
return board;
board[r][c] = null;
for (Piece p : pieces) {
if (tryInsert(p, r, c)) {
pieces.remove(p);
break;
}
}
if (getPieceAt(r, c) != null)
return solve(nextLoc(r, c).x, nextLoc(r, c).y);
else {
pieces.add(getPieceAt(prevLoc(r, c).x, prevLoc(r, c).y));
return solve(prevLoc(r, c).x, prevLoc(r, c).y);
}
}
我知道我没有提供太多关于这个谜题的信息,但无论具体细节如何,我的算法都应该有效。我已经测试了所有辅助方法,pieces 是所有未使用的 Pieces 的 List,tryInsert 尝试以所有可能的方向插入该作品,如果可以插入该作品,它将是。不幸的是,当我测试它时,我得到了 StackOverflow 错误。