1 packagealgorithm;2
3 importjava.util.Comparator;4 importjava.util.PriorityQueue;5
6 /**
7 * 重排九宫,或者称之为八码数问题,或是说数字推盘问题4,使用分支界定法实现8 */
9 public classEightPuzzle {10 //方阵边长
11 private static final int N = 3;12
13 //坐标的行列索引向下、左、上、右
14 private static final int[] row = {1, 0, -1, 0};15 private static final int[] col = {0, -1, 0, 1};16
17 /**
18 * 节点19 */
20 private classNode {21 privateNode parent;22 private int[][] mat;23 private intx, y;24 private intcost;25 private intlevel;26 privateNode() {27 mat = new int[N][N];28 }29 }30
31 /**
32 * 用于堆排序的比较对象33 */
34 class Comp implements Comparator{35 @Override36 public intcompare(Node o1, Node o2) {37 return (o1.cost + o1.level) - (o2.cost +o2.level);38 }39 }40
41 /**
42 * 打印矩阵43 *44 *@parammat45 */
46 private void pri