1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public void solve() { if (!pieceList.isEmpty()) { // We'll try to find a piece that fits on this board cell int emptyBoardCellIdx = board.getFirstEmptyBoardCellIndex(); // Try all available pieces for (int h = 0; h < pieceList.size(); h++) { Piece currentPiece = (Piece)pieceList.remove(h); for (int i = 0; i < Piece.NUMBEROFPERMUTATIONS; i++) { Piece permutation = currentPiece.nextPermutation(); /* Instead of always using the first cell to manipulate the piece, we now try to fit any cell of the piece on the first empty board cell */ for (int j = 0; j < Piece.NUMBEROFCELLS; j++) { if (board.placePiece(permutation, j, emptyBoardCellIdx)) { if (!prune()) solve(); board.removePiece(permutation); } } } /* Put the piece back into the list at the position where we took it to maintain the order of the list */ pieceList.add(h, currentPiece); } } else { puzzleSolved(); } } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |