1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Solver { public void solve() { ... if (!prune()) solve(); ... } private boolean prune() { /* We'll use the processed field of board cells to avoid infinite loops */ board.resetProcessed(); for (int i = 0; i < Board.NUMBEROFCELLS; i++) { if (board.getBoardCell(i).getIslandSize()%Piece.NUMBEROFCELLS != 0) { // We have found an unsolvable island return true; } } return false; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class BoardCell { public int getIslandSize() { if (!isProcessed() && isEmpty()) { setProcessed(true); // Avoid infinite recursion int numberOfCellsInIsland = 1; // this cell for (int i = 0; i < Cell.NUMBEROFSIDES; i++) { BoardCell neighbour=(BoardCell)getNeighbour(i); if (neighbour != null) { numberOfCellsInIsland += neighbour.getIslandSize(); } } return numberOfCellsInIsland; } else { return 0; } } } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |