跳马(华为od机考题)

news2024/11/7 20:56:31

一、题目

1.原题

马是象棋(包括中国象棋和国际象棋)中的棋子,
走法是每步直一格再斜一格,
先横着或直着走一格,然后再斜着走一个对角线,
可进可退,可越过河界,俗称“马走‘日’字。

给顶m行n列的棋盘(网格图),
棋盘上只有有棋子象棋中的棋子“马”,
并且每个棋子有等级之分,
等级为k的马可以跳1~k步
(走的方式与象棋中“马”的规则一样,不可以超出棋盘位置),
问是否能将所有马跳到同一位置,
如果存在,输出最少需要的总步数(每匹马的步数相加),
不存在则输出-1。

注:允许不同的马在跳的过程中跳到同一位置,
坐标为(x,y)的马跳一次可以跳到到坐标为
(x+1, y+2),  (x+1, y-2), 
(x+2, y+1), (x+2, y-1), 
(x-1, y+2), (x-1, y-2), 
(x-2, y+1), (x-2, y-1),
的格点上,但是不可以超出棋盘范围。


2.题目理解

马的移动规则:先横着或直着走一格,然后再斜着走一个对角线

即每一步(x±1/2,y±2/2)

二、思路与代码过程

1.思路

每一匹马给一个board,用于记录它抵达棋盘某位置的所用步数,所有的马的board组成boards,对board进行比较即可。

2.代码过程

①main函数

public static  void main(String[] args) {
        /*
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入棋盘行数m:");
        int m = sc.nextInt();
        System.out.println("请输入棋盘列数n:");
        int n = sc.nextInt();
        System.out.println("请输入马在棋盘上的分布:");
        int[][] horses = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                horses[i][j] = sc.nextInt();
            }
        }
        sc.close();
        System.out.println(Arrays.deepToString(horses));
        */
        int m = 4;
        int n = 4;
        int[][] horse = {{1,9,9,7},{0,3,0,6},{2,0,0,2},{1,0,3,0}};

        ArrayList<Horse> horses = turnToHorse(horse);
        int minStep = searhEachHorse(horses,m,n);
        if (minStep==-1){
            System.out.println("不能将所有马跳到同一位置");
        }else {
            System.out.println("能将所有马跳到同一位置,且最少需要的总步数为:"+minStep);
        }
    }

②searhEachHorse

private static int searhEachHorse(ArrayList<Horse> horses, int m, int n) {
        //每一匹马的位置和步数board组成所有马的boards
        ArrayList<int[][]> boards = new ArrayList<>();

        for (int i = 0; i < horses.size(); i++) {//每一匹马
            //先看一匹
            //for (int i = 1; i < 2; i++) {
                Horse horse = horses.get(i);
            if (horse.k!=0){

                //每一匹马都给个board,存的是每个位置所需要的步数step(step根据k算出每个位置的最小步数!)
                int[][] board = new int[m][n];
                int[][] boardk = new int[m][n];
                int k =horse.k;//跳步级别

                System.out.println("\n"+i+"---------searchEachHorse---------");

                System.out.print("当前马为:"+horse.toString());
                int[] horseZk = horse.getPostion();

                int[][] visit = new int[m][n];
                int[][] visited;

                Queue<int[]> q = new LinkedList<>();//要随调用传值
                q.add(horseZk);

                int[][] box = new int[m][n];//传值
                int level = 0;
                board = findPostion(horse,m,n,visit,q,box,level);//找完位置返回含有step信息的board
                boardk = boardCal(board,k);


                System.out.println("--===board-k===--");
                for (int[] row : board) {
                    System.out.println(Arrays.toString(row));
                }
                boards.add(boardk);
                System.out.println(i+"---------searchEachHorseFinished---------\n");
            }
        }

        //获得了所有马在棋盘上的位置和步数信息
        for (int[][] board : boards) {
            for (int[] row : board) {
                System.out.print(Arrays.toString(row)+"\n");
            }
            System.out.println();
        }
        int totalStep = CheckBoards(m,n,boards);
        return totalStep;
    }

③CheckBoards

private static int CheckBoards(int m,int n,ArrayList<int[][]> boards) {
        System.out.println("---------checkBoard---------");
        int totalSteps = 0 ;
        int[][] exist = new int[m][n];
        boolean allCanArr = true;
        for (int i = 0; i < m; i++) {
            Arrays.fill(exist[i], 1); // 填充每一行
        }//默认都存在
        int[][] AddStep = new int[m][n];
        for (int i = 0; i <m; i++) {
            for (int j = 0; j < n; j++) {
                int addSteps = 0;
                for (int k = 0; k < boards.size(); k++) {
                    //System.out.println(boards.get(k)[i][j]);
                    if (boards.get(k)[i][j] == 0) {//检验是否存在有马到不了的位置
                        exist[i][j] = 0;
                    }
                    addSteps += boards.get(k)[i][j];
                }
                AddStep[i][j] = addSteps;
            }
        }

        for (int[] row : AddStep) {
            for (int val : row) {
                if (val == 1) {
                    allCanArr = false;
                }
            }
            System.out.println(Arrays.toString(row));
        }
        for (int[] existBoard : exist) {
            System.out.println(Arrays.toString(existBoard));
        }
        int minStep = Integer.MAX_VALUE;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j <n; j++) {
                minStep = Math.min(minStep,AddStep[i][j]);
            }
        }
        totalSteps = minStep;
        System.out.println(totalSteps);
        if (allCanArr) {
            return totalSteps;
        }else{
            return -1;
        }
    }

④boardCal

private static int[][] boardCal(int[][] board, int k) {
        int[][] boardk = new int[board.length][board[0].length];
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                boardk[i][j] = board[i][j];
                if (boardk[i][j] <= k&&boardk[i][j] !=-1) {//=============================2
                    boardk[i][j]= 1;
                } else if (boardk[i][j] > k) {
                    /*小于:eg:k=2,step=5=2+2+1,step=7=2+2+2+1*/
                    int r = board[i][j]%k;
                    if (r==0){
                        boardk[i][j] =board[i][j]/k;
                    }else {
                        boardk[i][j] = board[i][j]/k+ 1;
                    }
                }
            }
        }
        for (int[] row : boardk) {
            System.out.println(Arrays.toString(row));
        }
        return boardk;
    }

⑤turnToHorse

private static ArrayList<Horse> turnToHorse(int[][] horse) {
        ArrayList<Horse> horses = new ArrayList<>();
        for (int i = 0; i < horse.length; i++) {
            for (int j = 0; j < horse[i].length; j++) {
                int[] postion =new int[2];
                int k = 0;
                postion[0] = i;
                postion[1] = j;
                k = horse[i][j];
                horses.add(new Horse(postion,k,0,0));
            }
        }
        return horses;
    }

⑥方向数组

static int[][] DIRECTION={{1,2},{1,-2},
            {2,1},{2,-1},
            {-1,2},{-1,-2},
            {-2,1},{-2,-1}};

⑦findPosition

static ArrayList<int[]> postions = new ArrayList<>();//协助观察
    private static int[][] findPostion(Horse horse,int m,int n,int[][] visit,Queue<int[]> q,int[][]box,int level ) {

        //变化量:step、level注意传值
        int k = horse.k;
        System.out.println("k:"+k);

        box[horse.postion[0]][horse.postion[1]] = -1;//=============================1

        while (!q.isEmpty()) {
            //队列中遍历
            int[] temp = q.poll();
            visit[temp[0]][temp[1]] = 1;


            ///*
            System.out.println("到当前马"+Arrays.toString(temp)+"的访问列表:");
            for (int[] row : visit) {
                System.out.println(Arrays.toString(row));
            }
            if (Arrays.stream(visit)
                    .flatMapToInt(Arrays::stream) // 将二维数组扁平化为一维流
                    .allMatch(value -> value == 1)){
                return visit;
            }
           // */
            System.out.println("-------findPostion-------");
            int size = q.size();
            System.out.println("加之前q的大小:"+size);

            for (int[] direction : DIRECTION) {

                int x = temp[0]+ direction[0];
                int y = temp[1] + direction[1];
                //System.out.println("("+x+","+y+")");
                int[] Z = {x,y};
                boolean contains = false;
                for (int[] currentArray : q) {
                    if (Arrays.equals(currentArray, Z)) {
                        contains = true; // 找到相同的数组
                    }
                }
                if (x>=0&&x<n&&y>=0&&y<m&&visit[x][y]==0&&!contains) {//只加入没去过的点
                    postions.add(Z);//协助观察
                    q.add(Z);

                }
            }
            int size1 = q.size();
            System.out.println("加之后q的大小:"+size1);
            System.out.println("到前马"+Arrays.toString(temp)+"时的q队列:");
            int newadd = size1 - size;
            System.out.println("新增了:"+newadd+"个元素");
            /*写到这里了,层级的自增!!!!!!!!!*/
            if(newadd>0){
                level++;
            }
            List<int[]> list = new ArrayList<>(q);
            for (int i = size1-1; i >=size; i--) {
                box[list.get(i)[0]][list.get(i)[1]] = level;
            }

            System.out.println("===box===");
            for (int[] row : box) {
                System.out.println(Arrays.toString(row));
            }

            for (int[] element : q) {
                System.out.println(Arrays.toString(element));
            }
            findPostion(horse,m,n,visit,q,box,level);
        }
        //return visit;
        return box;
    }

⑧Horse类(可不建)

public static class Horse{
        int[] postion;
        int k;
        int level;
        int step;
        public Horse(int[] postion, int k, int level,int step) {
            this.postion = postion;
            this.k = k;
            this.level = level;
            this.step = step;
        }
        public String toString(){
            return "坐标:["+postion[0]+","+postion[1]+"],等级:"+k+",当前层级:"+level+"当前步数:"+step+"\n";
        }

        public int getK(){
            return k;
        }
        public int getLevel(){
            return level;
        }
        public int[] getPostion(){
            return postion;
        }
    }

三、运行结果

1.运行截图

2.带数据分析运行结果

0---------searchEachHorse---------
当前马为:坐标:[0,0],等级:1,当前层级:0当前步数:0
k:1
到当前马[0, 0]的访问列表:
[1, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:2
到前马[0, 0]时的q队列:
新增了:2个元素
===box===
[-1, 0, 0, 0]
[0, 0, 1, 0]
[0, 1, 0, 0]
[0, 0, 0, 0]
[1, 2]
[2, 1]
k:1
到当前马[1, 2]的访问列表:
[1, 0, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:1
加之后q的大小:4
到前马[1, 2]时的q队列:
新增了:3个元素
===box===
[-1, 0, 0, 0]
[0, 0, 1, 0]
[2, 1, 0, 0]
[0, 2, 0, 2]
[2, 1]
[2, 0]
[3, 3]
[3, 1]
k:1
到当前马[2, 1]的访问列表:
[1, 0, 0, 0]
[0, 0, 1, 0]
[0, 1, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:5
到前马[2, 1]时的q队列:
新增了:2个元素
===box===
[-1, 0, 3, 0]
[0, 0, 1, 3]
[2, 1, 0, 0]
[0, 2, 0, 2]
[2, 0]
[3, 3]
[3, 1]
[1, 3]
[0, 2]
k:1
到当前马[2, 0]的访问列表:
[1, 0, 0, 0]
[0, 0, 1, 0]
[1, 1, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[2, 0]时的q队列:
新增了:2个元素
===box===
[-1, 4, 3, 0]
[0, 0, 1, 3]
[2, 1, 0, 0]
[0, 2, 4, 2]
[3, 3]
[3, 1]
[1, 3]
[0, 2]
[3, 2]
[0, 1]
k:1
到当前马[3, 3]的访问列表:
[1, 0, 0, 0]
[0, 0, 1, 0]
[1, 1, 0, 0]
[0, 0, 0, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 0]
[0, 0, 1, 3]
[2, 1, 0, 0]
[0, 2, 4, 2]
[3, 1]
[1, 3]
[0, 2]
[3, 2]
[0, 1]
k:1
到当前马[3, 1]的访问列表:
[1, 0, 0, 0]
[0, 0, 1, 0]
[1, 1, 0, 0]
[0, 1, 0, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[3, 1]时的q队列:
新增了:2个元素
===box===
[-1, 4, 3, 0]
[5, 0, 1, 3]
[2, 1, 0, 5]
[0, 2, 4, 2]
[1, 3]
[0, 2]
[3, 2]
[0, 1]
[2, 3]
[1, 0]
k:1
到当前马[1, 3]的访问列表:
[1, 0, 0, 0]
[0, 0, 1, 1]
[1, 1, 0, 0]
[0, 1, 0, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[1, 3]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 0]
[5, 0, 1, 3]
[2, 1, 0, 5]
[0, 2, 4, 2]
[0, 2]
[3, 2]
[0, 1]
[2, 3]
[1, 0]
k:1
到当前马[0, 2]的访问列表:
[1, 0, 1, 0]
[0, 0, 1, 1]
[1, 1, 0, 0]
[0, 1, 0, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[0, 2]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 0]
[5, 0, 1, 3]
[2, 1, 0, 5]
[0, 2, 4, 2]
[3, 2]
[0, 1]
[2, 3]
[1, 0]
k:1
到当前马[3, 2]的访问列表:
[1, 0, 1, 0]
[0, 0, 1, 1]
[1, 1, 0, 0]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[3, 2]时的q队列:
新增了:1个元素
===box===
[-1, 4, 3, 0]
[5, 6, 1, 3]
[2, 1, 0, 5]
[0, 2, 4, 2]
[0, 1]
[2, 3]
[1, 0]
[1, 1]
k:1
到当前马[0, 1]的访问列表:
[1, 1, 1, 0]
[0, 0, 1, 1]
[1, 1, 0, 0]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[0, 1]时的q队列:
新增了:1个元素
===box===
[-1, 4, 3, 0]
[5, 6, 1, 3]
[2, 1, 7, 5]
[0, 2, 4, 2]
[2, 3]
[1, 0]
[1, 1]
[2, 2]
k:1
到当前马[2, 3]的访问列表:
[1, 1, 1, 0]
[0, 0, 1, 1]
[1, 1, 0, 1]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[2, 3]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 0]
[5, 6, 1, 3]
[2, 1, 7, 5]
[0, 2, 4, 2]
[1, 0]
[1, 1]
[2, 2]
k:1
到当前马[1, 0]的访问列表:
[1, 1, 1, 0]
[1, 0, 1, 1]
[1, 1, 0, 1]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[1, 0]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 0]
[5, 6, 1, 3]
[2, 1, 7, 5]
[0, 2, 4, 2]
[1, 1]
[2, 2]
k:1
到当前马[1, 1]的访问列表:
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 0, 1]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:3
到前马[1, 1]时的q队列:
新增了:2个元素
===box===
[-1, 4, 3, 8]
[5, 6, 1, 3]
[2, 1, 7, 5]
[8, 2, 4, 2]
[2, 2]
[3, 0]
[0, 3]
k:1
到当前马[2, 2]的访问列表:
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 1, 1]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[2, 2]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 8]
[5, 6, 1, 3]
[2, 1, 7, 5]
[8, 2, 4, 2]
[3, 0]
[0, 3]
k:1
到当前马[3, 0]的访问列表:
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[-1, 4, 3, 8]
[5, 6, 1, 3]
[2, 1, 7, 5]
[8, 2, 4, 2]
[0, 3]
k:1
到当前马[0, 3]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[-1, 4, 3, 8]
[5, 6, 1, 3]
[2, 1, 7, 5]
[8, 2, 4, 2]
--===board-k===--
[-1, 4, 3, 8]
[5, 6, 1, 3]
[2, 1, 7, 5]
[8, 2, 4, 2]
0---------searchEachHorseFinished---------


1---------searchEachHorse---------
当前马为:坐标:[0,1],等级:9,当前层级:0当前步数:0
k:9
到当前马[0, 1]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:3
到前马[0, 1]时的q队列:
新增了:3个元素
===box===
[0, -1, 0, 0]
[0, 0, 0, 1]
[1, 0, 1, 0]
[0, 0, 0, 0]
[1, 3]
[2, 2]
[2, 0]
k:9
到当前马[1, 3]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:4
到前马[1, 3]时的q队列:
新增了:2个元素
===box===
[0, -1, 0, 0]
[0, 0, 0, 1]
[1, 2, 1, 0]
[0, 0, 2, 0]
[2, 2]
[2, 0]
[2, 1]
[3, 2]
k:9
到当前马[2, 2]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 0, 1, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:6
到前马[2, 2]时的q队列:
新增了:3个元素
===box===
[0, -1, 0, 3]
[3, 0, 0, 1]
[1, 2, 1, 0]
[3, 0, 2, 0]
[2, 0]
[2, 1]
[3, 2]
[3, 0]
[1, 0]
[0, 3]
k:9
到当前马[2, 0]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 0, 1, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[2, 0]时的q队列:
新增了:1个元素
===box===
[0, -1, 0, 3]
[3, 0, 4, 1]
[1, 2, 1, 0]
[3, 0, 2, 0]
[2, 1]
[3, 2]
[3, 0]
[1, 0]
[0, 3]
[1, 2]
k:9
到当前马[2, 1]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:8
到前马[2, 1]时的q队列:
新增了:3个元素
===box===
[5, -1, 5, 3]
[3, 0, 4, 1]
[1, 2, 1, 0]
[3, 0, 2, 5]
[3, 2]
[3, 0]
[1, 0]
[0, 3]
[1, 2]
[3, 3]
[0, 2]
[0, 0]
k:9
到当前马[3, 2]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[3, 2]时的q队列:
新增了:1个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[3, 0, 2, 5]
[3, 0]
[1, 0]
[0, 3]
[1, 2]
[3, 3]
[0, 2]
[0, 0]
[1, 1]
k:9
到当前马[3, 0]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:7
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[3, 0, 2, 5]
[1, 0]
[0, 3]
[1, 2]
[3, 3]
[0, 2]
[0, 0]
[1, 1]
k:9
到当前马[1, 0]的访问列表:
[0, 1, 0, 0]
[1, 0, 0, 1]
[1, 1, 1, 0]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:6
加之后q的大小:7
到前马[1, 0]时的q队列:
新增了:1个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[3, 7, 2, 5]
[0, 3]
[1, 2]
[3, 3]
[0, 2]
[0, 0]
[1, 1]
[3, 1]
k:9
到当前马[0, 3]的访问列表:
[0, 1, 0, 1]
[1, 0, 0, 1]
[1, 1, 1, 0]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[3, 7, 2, 5]
[1, 2]
[3, 3]
[0, 2]
[0, 0]
[1, 1]
[3, 1]
k:9
到当前马[1, 2]的访问列表:
[0, 1, 0, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[1, 2]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[3, 7, 2, 5]
[3, 3]
[0, 2]
[0, 0]
[1, 1]
[3, 1]
k:9
到当前马[3, 3]的访问列表:
[0, 1, 0, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[3, 7, 2, 5]
[0, 2]
[0, 0]
[1, 1]
[3, 1]
k:9
到当前马[0, 2]的访问列表:
[0, 1, 1, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[0, 2]时的q队列:
新增了:1个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[3, 7, 2, 5]
[0, 0]
[1, 1]
[3, 1]
[2, 3]
k:9
到当前马[0, 0]的访问列表:
[1, 1, 1, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[0, 0]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[3, 7, 2, 5]
[1, 1]
[3, 1]
[2, 3]
k:9
到当前马[1, 1]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 0]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[1, 1]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[3, 7, 2, 5]
[3, 1]
[2, 3]
k:9
到当前马[3, 1]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 0]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[3, 1]时的q队列:
新增了:0个元素
===box===
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[3, 7, 2, 5]
[2, 3]
k:9
到当前马[2, 3]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, -1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
--===board-k===--
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[3, 7, 2, 5]
1---------searchEachHorseFinished---------


2---------searchEachHorse---------
当前马为:坐标:[0,2],等级:9,当前层级:0当前步数:0
k:9
到当前马[0, 2]的访问列表:
[0, 0, 1, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:3
到前马[0, 2]时的q队列:
新增了:3个元素
===box===
[0, 0, -1, 0]
[1, 0, 0, 0]
[0, 1, 0, 1]
[0, 0, 0, 0]
[1, 0]
[2, 3]
[2, 1]
k:9
到当前马[1, 0]的访问列表:
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:4
到前马[1, 0]时的q队列:
新增了:2个元素
===box===
[0, 0, -1, 0]
[1, 0, 0, 0]
[0, 1, 2, 1]
[0, 2, 0, 0]
[2, 3]
[2, 1]
[2, 2]
[3, 1]
k:9
到当前马[2, 3]的访问列表:
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[2, 3]时的q队列:
新增了:1个元素
===box===
[0, 0, -1, 0]
[1, 3, 0, 0]
[0, 1, 2, 1]
[0, 2, 0, 0]
[2, 1]
[2, 2]
[3, 1]
[1, 1]
k:9
到当前马[2, 1]的访问列表:
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 1, 0, 1]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:6
到前马[2, 1]时的q队列:
新增了:3个元素
===box===
[4, 0, -1, 0]
[1, 3, 0, 4]
[0, 1, 2, 1]
[0, 2, 0, 4]
[2, 2]
[3, 1]
[1, 1]
[3, 3]
[1, 3]
[0, 0]
k:9
到当前马[2, 2]的访问列表:
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 1, 1, 1]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:8
到前马[2, 2]时的q队列:
新增了:3个元素
===box===
[4, 5, -1, 5]
[1, 3, 0, 4]
[0, 1, 2, 1]
[5, 2, 0, 4]
[3, 1]
[1, 1]
[3, 3]
[1, 3]
[0, 0]
[3, 0]
[0, 3]
[0, 1]
k:9
到当前马[3, 1]的访问列表:
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[3, 1]时的q队列:
新增了:1个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 0, 4]
[1, 1]
[3, 3]
[1, 3]
[0, 0]
[3, 0]
[0, 3]
[0, 1]
[1, 2]
k:9
到当前马[1, 1]的访问列表:
[0, 0, 1, 0]
[1, 1, 0, 0]
[0, 1, 1, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[1, 1]时的q队列:
新增了:1个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 7, 4]
[3, 3]
[1, 3]
[0, 0]
[3, 0]
[0, 3]
[0, 1]
[1, 2]
[3, 2]
k:9
到当前马[3, 3]的访问列表:
[0, 0, 1, 0]
[1, 1, 0, 0]
[0, 1, 1, 1]
[0, 1, 0, 1]
-------findPostion-------
加之前q的大小:7
加之后q的大小:7
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 7, 4]
[1, 3]
[0, 0]
[3, 0]
[0, 3]
[0, 1]
[1, 2]
[3, 2]
k:9
到当前马[1, 3]的访问列表:
[0, 0, 1, 0]
[1, 1, 0, 1]
[0, 1, 1, 1]
[0, 1, 0, 1]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[1, 3]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 7, 4]
[0, 0]
[3, 0]
[0, 3]
[0, 1]
[1, 2]
[3, 2]
k:9
到当前马[0, 0]的访问列表:
[1, 0, 1, 0]
[1, 1, 0, 1]
[0, 1, 1, 1]
[0, 1, 0, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[0, 0]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 7, 4]
[3, 0]
[0, 3]
[0, 1]
[1, 2]
[3, 2]
k:9
到当前马[3, 0]的访问列表:
[1, 0, 1, 0]
[1, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 7, 4]
[0, 3]
[0, 1]
[1, 2]
[3, 2]
k:9
到当前马[0, 3]的访问列表:
[1, 0, 1, 1]
[1, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[0, 1, 2, 1]
[5, 2, 7, 4]
[0, 1]
[1, 2]
[3, 2]
k:9
到当前马[0, 1]的访问列表:
[1, 1, 1, 1]
[1, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:3
到前马[0, 1]时的q队列:
新增了:1个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[8, 1, 2, 1]
[5, 2, 7, 4]
[1, 2]
[3, 2]
[2, 0]
k:9
到当前马[1, 2]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[1, 2]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[8, 1, 2, 1]
[5, 2, 7, 4]
[3, 2]
[2, 0]
k:9
到当前马[3, 2]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[0, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[3, 2]时的q队列:
新增了:0个元素
===box===
[4, 5, -1, 5]
[1, 3, 6, 4]
[8, 1, 2, 1]
[5, 2, 7, 4]
[2, 0]
k:9
到当前马[2, 0]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, -1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
--===board-k===--
[4, 5, -1, 5]
[1, 3, 6, 4]
[8, 1, 2, 1]
[5, 2, 7, 4]
2---------searchEachHorseFinished---------


3---------searchEachHorse---------
当前马为:坐标:[0,3],等级:7,当前层级:0当前步数:0
k:7
到当前马[0, 3]的访问列表:
[0, 0, 0, 1]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:2
到前马[0, 3]时的q队列:
新增了:2个元素
===box===
[0, 0, 0, -1]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 0]
[1, 1]
[2, 2]
k:7
到当前马[1, 1]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:1
加之后q的大小:4
到前马[1, 1]时的q队列:
新增了:3个元素
===box===
[0, 0, 0, -1]
[0, 1, 0, 0]
[0, 0, 1, 2]
[2, 0, 2, 0]
[2, 2]
[2, 3]
[3, 2]
[3, 0]
k:7
到当前马[2, 2]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:5
到前马[2, 2]时的q队列:
新增了:2个元素
===box===
[0, 3, 0, -1]
[3, 1, 0, 0]
[0, 0, 1, 2]
[2, 0, 2, 0]
[2, 3]
[3, 2]
[3, 0]
[1, 0]
[0, 1]
k:7
到当前马[2, 3]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[2, 3]时的q队列:
新增了:2个元素
===box===
[0, 3, 4, -1]
[3, 1, 0, 0]
[0, 0, 1, 2]
[2, 4, 2, 0]
[3, 2]
[3, 0]
[1, 0]
[0, 1]
[3, 1]
[0, 2]
k:7
到当前马[3, 2]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:7
到前马[3, 2]时的q队列:
新增了:2个元素
===box===
[0, 3, 4, -1]
[3, 1, 0, 5]
[5, 0, 1, 2]
[2, 4, 2, 0]
[3, 0]
[1, 0]
[0, 1]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
k:7
到当前马[3, 0]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[0, 3, 4, -1]
[3, 1, 0, 5]
[5, 0, 1, 2]
[2, 4, 2, 0]
[1, 0]
[0, 1]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
k:7
到当前马[1, 0]的访问列表:
[0, 0, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[1, 0]时的q队列:
新增了:0个元素
===box===
[0, 3, 4, -1]
[3, 1, 0, 5]
[5, 0, 1, 2]
[2, 4, 2, 0]
[0, 1]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
k:7
到当前马[0, 1]的访问列表:
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[0, 1]时的q队列:
新增了:0个元素
===box===
[0, 3, 4, -1]
[3, 1, 0, 5]
[5, 0, 1, 2]
[2, 4, 2, 0]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
k:7
到当前马[3, 1]的访问列表:
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[3, 1]时的q队列:
新增了:1个元素
===box===
[0, 3, 4, -1]
[3, 1, 6, 5]
[5, 0, 1, 2]
[2, 4, 2, 0]
[0, 2]
[2, 0]
[1, 3]
[1, 2]
k:7
到当前马[0, 2]的访问列表:
[0, 1, 1, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[0, 2]时的q队列:
新增了:1个元素
===box===
[0, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 0]
[2, 0]
[1, 3]
[1, 2]
[2, 1]
k:7
到当前马[2, 0]的访问列表:
[0, 1, 1, 1]
[1, 1, 0, 0]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[2, 0]时的q队列:
新增了:0个元素
===box===
[0, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 0]
[1, 3]
[1, 2]
[2, 1]
k:7
到当前马[1, 3]的访问列表:
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[1, 3]时的q队列:
新增了:0个元素
===box===
[0, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 0]
[1, 2]
[2, 1]
k:7
到当前马[1, 2]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:1
加之后q的大小:3
到前马[1, 2]时的q队列:
新增了:2个元素
===box===
[8, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 8]
[2, 1]
[3, 3]
[0, 0]
k:7
到当前马[2, 1]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[2, 1]时的q队列:
新增了:0个元素
===box===
[8, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 8]
[3, 3]
[0, 0]
k:7
到当前马[3, 3]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[8, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 8]
[0, 0]
k:7
到当前马[0, 0]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[2, 1, 1, -1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 2]
--===board-k===--
[8, 3, 4, -1]
[3, 1, 6, 5]
[5, 7, 1, 2]
[2, 4, 2, 8]
3---------searchEachHorseFinished---------


5---------searchEachHorse---------
当前马为:坐标:[1,1],等级:3,当前层级:0当前步数:0
k:3
到当前马[1, 1]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:4
到前马[1, 1]时的q队列:
新增了:4个元素
===box===
[0, 0, 0, 1]
[0, -1, 0, 0]
[0, 0, 0, 1]
[1, 0, 1, 0]
[2, 3]
[3, 2]
[3, 0]
[0, 3]
k:3
到当前马[2, 3]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:5
到前马[2, 3]时的q队列:
新增了:2个元素
===box===
[0, 0, 2, 1]
[0, -1, 0, 0]
[0, 0, 0, 1]
[1, 2, 1, 0]
[3, 2]
[3, 0]
[0, 3]
[3, 1]
[0, 2]
k:3
到当前马[3, 2]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[3, 2]时的q队列:
新增了:2个元素
===box===
[0, 0, 2, 1]
[0, -1, 0, 3]
[3, 0, 0, 1]
[1, 2, 1, 0]
[3, 0]
[0, 3]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
k:3
到当前马[3, 0]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[3, 0]时的q队列:
新增了:1个元素
===box===
[0, 0, 2, 1]
[0, -1, 0, 3]
[3, 0, 4, 1]
[1, 2, 1, 0]
[0, 3]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
[2, 2]
k:3
到当前马[0, 3]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[0, 0, 2, 1]
[0, -1, 0, 3]
[3, 0, 4, 1]
[1, 2, 1, 0]
[3, 1]
[0, 2]
[2, 0]
[1, 3]
[2, 2]
k:3
到当前马[3, 1]的访问列表:
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[3, 1]时的q队列:
新增了:2个元素
===box===
[0, 0, 2, 1]
[5, -1, 5, 3]
[3, 0, 4, 1]
[1, 2, 1, 0]
[0, 2]
[2, 0]
[1, 3]
[2, 2]
[1, 2]
[1, 0]
k:3
到当前马[0, 2]的访问列表:
[0, 0, 1, 1]
[0, 1, 0, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[0, 2]时的q队列:
新增了:1个元素
===box===
[0, 0, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[2, 0]
[1, 3]
[2, 2]
[1, 2]
[1, 0]
[2, 1]
k:3
到当前马[2, 0]的访问列表:
[0, 0, 1, 1]
[0, 1, 0, 0]
[1, 0, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[2, 0]时的q队列:
新增了:1个元素
===box===
[0, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[1, 3]
[2, 2]
[1, 2]
[1, 0]
[2, 1]
[0, 1]
k:3
到当前马[1, 3]的访问列表:
[0, 0, 1, 1]
[0, 1, 0, 1]
[1, 0, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[1, 3]时的q队列:
新增了:0个元素
===box===
[0, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[2, 2]
[1, 2]
[1, 0]
[2, 1]
[0, 1]
k:3
到当前马[2, 2]的访问列表:
[0, 0, 1, 1]
[0, 1, 0, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[2, 2]时的q队列:
新增了:0个元素
===box===
[0, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 0]
[1, 2]
[1, 0]
[2, 1]
[0, 1]
k:3
到当前马[1, 2]的访问列表:
[0, 0, 1, 1]
[0, 1, 1, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:5
到前马[1, 2]时的q队列:
新增了:2个元素
===box===
[8, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[1, 0]
[2, 1]
[0, 1]
[3, 3]
[0, 0]
k:3
到当前马[1, 0]的访问列表:
[0, 0, 1, 1]
[1, 1, 1, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[1, 0]时的q队列:
新增了:0个元素
===box===
[8, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[2, 1]
[0, 1]
[3, 3]
[0, 0]
k:3
到当前马[2, 1]的访问列表:
[0, 0, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[2, 1]时的q队列:
新增了:0个元素
===box===
[8, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[0, 1]
[3, 3]
[0, 0]
k:3
到当前马[0, 1]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[0, 1]时的q队列:
新增了:0个元素
===box===
[8, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[3, 3]
[0, 0]
k:3
到当前马[3, 3]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[8, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
[0, 0]
k:3
到当前马[0, 0]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[3, 3, 1, 1]
[2, -1, 2, 1]
[1, 2, 2, 1]
[1, 1, 1, 3]
--===board-k===--
[8, 7, 2, 1]
[5, -1, 5, 3]
[3, 6, 4, 1]
[1, 2, 1, 8]
5---------searchEachHorseFinished---------


7---------searchEachHorse---------
当前马为:坐标:[1,3],等级:6,当前层级:0当前步数:0
k:6
到当前马[1, 3]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:3
到前马[1, 3]时的q队列:
新增了:3个元素
===box===
[0, 1, 0, 0]
[0, 0, 0, -1]
[0, 1, 0, 0]
[0, 0, 1, 0]
[2, 1]
[3, 2]
[0, 1]
k:6
到当前马[2, 1]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:5
到前马[2, 1]时的q队列:
新增了:3个元素
===box===
[2, 1, 2, 0]
[0, 0, 0, -1]
[0, 1, 0, 0]
[0, 0, 1, 2]
[3, 2]
[0, 1]
[3, 3]
[0, 2]
[0, 0]
k:6
到当前马[3, 2]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[3, 2]时的q队列:
新增了:2个元素
===box===
[2, 1, 2, 0]
[0, 3, 0, -1]
[3, 1, 0, 0]
[0, 0, 1, 2]
[0, 1]
[3, 3]
[0, 2]
[0, 0]
[2, 0]
[1, 1]
k:6
到当前马[0, 1]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[0, 1]时的q队列:
新增了:1个元素
===box===
[2, 1, 2, 0]
[0, 3, 0, -1]
[3, 1, 4, 0]
[0, 0, 1, 2]
[3, 3]
[0, 2]
[0, 0]
[2, 0]
[1, 1]
[2, 2]
k:6
到当前马[3, 3]的访问列表:
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[3, 3]时的q队列:
新增了:1个元素
===box===
[2, 1, 2, 0]
[0, 3, 5, -1]
[3, 1, 4, 0]
[0, 0, 1, 2]
[0, 2]
[0, 0]
[2, 0]
[1, 1]
[2, 2]
[1, 2]
k:6
到当前马[0, 2]的访问列表:
[0, 1, 1, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:7
到前马[0, 2]时的q队列:
新增了:2个元素
===box===
[2, 1, 2, 0]
[6, 3, 5, -1]
[3, 1, 4, 6]
[0, 0, 1, 2]
[0, 0]
[2, 0]
[1, 1]
[2, 2]
[1, 2]
[1, 0]
[2, 3]
k:6
到当前马[0, 0]的访问列表:
[1, 1, 1, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[0, 0]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 0]
[6, 3, 5, -1]
[3, 1, 4, 6]
[0, 0, 1, 2]
[2, 0]
[1, 1]
[2, 2]
[1, 2]
[1, 0]
[2, 3]
k:6
到当前马[2, 0]的访问列表:
[1, 1, 1, 0]
[0, 0, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[2, 0]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 0]
[6, 3, 5, -1]
[3, 1, 4, 6]
[0, 0, 1, 2]
[1, 1]
[2, 2]
[1, 2]
[1, 0]
[2, 3]
k:6
到当前马[1, 1]的访问列表:
[1, 1, 1, 0]
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[1, 1]时的q队列:
新增了:2个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 0, 1, 2]
[2, 2]
[1, 2]
[1, 0]
[2, 3]
[3, 0]
[0, 3]
k:6
到当前马[2, 2]的访问列表:
[1, 1, 1, 0]
[0, 1, 0, 1]
[1, 1, 1, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[2, 2]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 0, 1, 2]
[1, 2]
[1, 0]
[2, 3]
[3, 0]
[0, 3]
k:6
到当前马[1, 2]的访问列表:
[1, 1, 1, 0]
[0, 1, 1, 1]
[1, 1, 1, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:5
到前马[1, 2]时的q队列:
新增了:1个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 8, 1, 2]
[1, 0]
[2, 3]
[3, 0]
[0, 3]
[3, 1]
k:6
到当前马[1, 0]的访问列表:
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 1, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[1, 0]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 8, 1, 2]
[2, 3]
[3, 0]
[0, 3]
[3, 1]
k:6
到当前马[2, 3]的访问列表:
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 1, 1]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[2, 3]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 8, 1, 2]
[3, 0]
[0, 3]
[3, 1]
k:6
到当前马[3, 0]的访问列表:
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 8, 1, 2]
[0, 3]
[3, 1]
k:6
到当前马[0, 3]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 8, 1, 2]
[3, 1]
k:6
到当前马[3, 1]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 2]
[1, 1, 1, -1]
[1, 1, 1, 1]
[2, 2, 1, 1]
--===board-k===--
[2, 1, 2, 7]
[6, 3, 5, -1]
[3, 1, 4, 6]
[7, 8, 1, 2]
7---------searchEachHorseFinished---------


8---------searchEachHorse---------
当前马为:坐标:[2,0],等级:2,当前层级:0当前步数:0
k:2
到当前马[2, 0]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[1, 0, 0, 0]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:3
到前马[2, 0]时的q队列:
新增了:3个元素
===box===
[0, 1, 0, 0]
[0, 0, 1, 0]
[-1, 0, 0, 0]
[0, 0, 1, 0]
[3, 2]
[1, 2]
[0, 1]
k:2
到当前马[3, 2]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:4
到前马[3, 2]时的q队列:
新增了:2个元素
===box===
[0, 1, 0, 0]
[0, 2, 1, 2]
[-1, 0, 0, 0]
[0, 0, 1, 0]
[1, 2]
[0, 1]
[1, 3]
[1, 1]
k:2
到当前马[1, 2]的访问列表:
[0, 0, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:6
到前马[1, 2]时的q队列:
新增了:3个元素
===box===
[3, 1, 0, 0]
[0, 2, 1, 2]
[-1, 0, 0, 0]
[0, 3, 1, 3]
[0, 1]
[1, 3]
[1, 1]
[3, 3]
[3, 1]
[0, 0]
k:2
到当前马[0, 1]的访问列表:
[0, 1, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[0, 1]时的q队列:
新增了:1个元素
===box===
[3, 1, 0, 0]
[0, 2, 1, 2]
[-1, 0, 4, 0]
[0, 3, 1, 3]
[1, 3]
[1, 1]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
k:2
到当前马[1, 3]的访问列表:
[0, 1, 0, 0]
[0, 0, 1, 1]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[1, 3]时的q队列:
新增了:1个元素
===box===
[3, 1, 0, 0]
[0, 2, 1, 2]
[-1, 5, 4, 0]
[0, 3, 1, 3]
[1, 1]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
[2, 1]
k:2
到当前马[1, 1]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:8
到前马[1, 1]时的q队列:
新增了:3个元素
===box===
[3, 1, 0, 6]
[0, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
k:2
到当前马[3, 3]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 0, 0, 0]
[0, 0, 1, 1]
-------findPostion-------
加之前q的大小:7
加之后q的大小:7
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[3, 1, 0, 6]
[0, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[3, 1]
[0, 0]
[2, 2]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
k:2
到当前马[3, 1]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 0, 0, 0]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:6
加之后q的大小:7
到前马[3, 1]时的q队列:
新增了:1个元素
===box===
[3, 1, 0, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[0, 0]
[2, 2]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
[1, 0]
k:2
到当前马[0, 0]的访问列表:
[1, 1, 0, 0]
[0, 1, 1, 1]
[1, 0, 0, 0]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[0, 0]时的q队列:
新增了:0个元素
===box===
[3, 1, 0, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[2, 2]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
[1, 0]
k:2
到当前马[2, 2]的访问列表:
[1, 1, 0, 0]
[0, 1, 1, 1]
[1, 0, 1, 0]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[2, 2]时的q队列:
新增了:0个元素
===box===
[3, 1, 0, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
[1, 0]
k:2
到当前马[2, 1]的访问列表:
[1, 1, 0, 0]
[0, 1, 1, 1]
[1, 1, 1, 0]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:5
到前马[2, 1]时的q队列:
新增了:1个元素
===box===
[3, 1, 8, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[2, 3]
[3, 0]
[0, 3]
[1, 0]
[0, 2]
k:2
到当前马[2, 3]的访问列表:
[1, 1, 0, 0]
[0, 1, 1, 1]
[1, 1, 1, 1]
[0, 1, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[2, 3]时的q队列:
新增了:0个元素
===box===
[3, 1, 8, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[3, 0]
[0, 3]
[1, 0]
[0, 2]
k:2
到当前马[3, 0]的访问列表:
[1, 1, 0, 0]
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[3, 1, 8, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[0, 3]
[1, 0]
[0, 2]
k:2
到当前马[0, 3]的访问列表:
[1, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[3, 1, 8, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[1, 0]
[0, 2]
k:2
到当前马[1, 0]的访问列表:
[1, 1, 0, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[1, 0]时的q队列:
新增了:0个元素
===box===
[3, 1, 8, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
[0, 2]
k:2
到当前马[0, 2]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[2, 1, 4, 3]
[4, 1, 1, 1]
[-1, 3, 2, 3]
[3, 2, 1, 2]
--===board-k===--
[3, 1, 8, 6]
[7, 2, 1, 2]
[-1, 5, 4, 6]
[6, 3, 1, 3]
8---------searchEachHorseFinished---------


11---------searchEachHorse---------
当前马为:坐标:[2,3],等级:2,当前层级:0当前步数:0
k:2
到当前马[2, 3]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:3
到前马[2, 3]时的q队列:
新增了:3个元素
===box===
[0, 0, 1, 0]
[0, 1, 0, 0]
[0, 0, 0, -1]
[0, 1, 0, 0]
[3, 1]
[1, 1]
[0, 2]
k:2
到当前马[3, 1]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:4
到前马[3, 1]时的q队列:
新增了:2个元素
===box===
[0, 0, 1, 0]
[2, 1, 2, 0]
[0, 0, 0, -1]
[0, 1, 0, 0]
[1, 1]
[0, 2]
[1, 2]
[1, 0]
k:2
到当前马[1, 1]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:6
到前马[1, 1]时的q队列:
新增了:3个元素
===box===
[0, 0, 1, 3]
[2, 1, 2, 0]
[0, 0, 0, -1]
[3, 1, 3, 0]
[0, 2]
[1, 2]
[1, 0]
[3, 2]
[3, 0]
[0, 3]
k:2
到当前马[0, 2]的访问列表:
[0, 0, 1, 0]
[0, 1, 0, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:6
到前马[0, 2]时的q队列:
新增了:1个元素
===box===
[0, 0, 1, 3]
[2, 1, 2, 0]
[0, 4, 0, -1]
[3, 1, 3, 0]
[1, 2]
[1, 0]
[3, 2]
[3, 0]
[0, 3]
[2, 1]
k:2
到当前马[1, 2]的访问列表:
[0, 0, 1, 0]
[0, 1, 1, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:8
到前马[1, 2]时的q队列:
新增了:3个元素
===box===
[5, 0, 1, 3]
[2, 1, 2, 0]
[5, 4, 0, -1]
[3, 1, 3, 5]
[1, 0]
[3, 2]
[3, 0]
[0, 3]
[2, 1]
[2, 0]
[3, 3]
[0, 0]
k:2
到当前马[1, 0]的访问列表:
[0, 0, 1, 0]
[1, 1, 1, 0]
[0, 0, 0, 1]
[0, 1, 0, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[1, 0]时的q队列:
新增了:1个元素
===box===
[5, 0, 1, 3]
[2, 1, 2, 0]
[5, 4, 6, -1]
[3, 1, 3, 5]
[3, 2]
[3, 0]
[0, 3]
[2, 1]
[2, 0]
[3, 3]
[0, 0]
[2, 2]
k:2
到当前马[3, 2]的访问列表:
[0, 0, 1, 0]
[1, 1, 1, 0]
[0, 0, 0, 1]
[0, 1, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[3, 2]时的q队列:
新增了:1个元素
===box===
[5, 0, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[3, 0]
[0, 3]
[2, 1]
[2, 0]
[3, 3]
[0, 0]
[2, 2]
[1, 3]
k:2
到当前马[3, 0]的访问列表:
[0, 0, 1, 0]
[1, 1, 1, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:7
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[5, 0, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[0, 3]
[2, 1]
[2, 0]
[3, 3]
[0, 0]
[2, 2]
[1, 3]
k:2
到当前马[0, 3]的访问列表:
[0, 0, 1, 1]
[1, 1, 1, 0]
[0, 0, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[5, 0, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[2, 1]
[2, 0]
[3, 3]
[0, 0]
[2, 2]
[1, 3]
k:2
到当前马[2, 1]的访问列表:
[0, 0, 1, 1]
[1, 1, 1, 0]
[0, 1, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[2, 1]时的q队列:
新增了:0个元素
===box===
[5, 0, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[2, 0]
[3, 3]
[0, 0]
[2, 2]
[1, 3]
k:2
到当前马[2, 0]的访问列表:
[0, 0, 1, 1]
[1, 1, 1, 0]
[1, 1, 0, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:5
到前马[2, 0]时的q队列:
新增了:1个元素
===box===
[5, 8, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[3, 3]
[0, 0]
[2, 2]
[1, 3]
[0, 1]
k:2
到当前马[3, 3]的访问列表:
[0, 0, 1, 1]
[1, 1, 1, 0]
[1, 1, 0, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[5, 8, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[0, 0]
[2, 2]
[1, 3]
[0, 1]
k:2
到当前马[0, 0]的访问列表:
[1, 0, 1, 1]
[1, 1, 1, 0]
[1, 1, 0, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[0, 0]时的q队列:
新增了:0个元素
===box===
[5, 8, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[2, 2]
[1, 3]
[0, 1]
k:2
到当前马[2, 2]的访问列表:
[1, 0, 1, 1]
[1, 1, 1, 0]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[2, 2]时的q队列:
新增了:0个元素
===box===
[5, 8, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[1, 3]
[0, 1]
k:2
到当前马[1, 3]的访问列表:
[1, 0, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[1, 3]时的q队列:
新增了:0个元素
===box===
[5, 8, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
[0, 1]
k:2
到当前马[0, 1]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[3, 4, 1, 2]
[1, 1, 1, 4]
[3, 2, 3, -1]
[2, 1, 2, 3]
--===board-k===--
[5, 8, 1, 3]
[2, 1, 2, 7]
[5, 4, 6, -1]
[3, 1, 3, 5]
11---------searchEachHorseFinished---------


12---------searchEachHorse---------
当前马为:坐标:[3,0],等级:1,当前层级:0当前步数:0
k:1
到当前马[3, 0]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:2
到前马[3, 0]时的q队列:
新增了:2个元素
===box===
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[-1, 0, 0, 0]
[2, 2]
[1, 1]
k:1
到当前马[2, 2]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:1
加之后q的大小:4
到前马[2, 2]时的q队列:
新增了:3个元素
===box===
[0, 2, 0, 2]
[2, 1, 0, 0]
[0, 0, 1, 0]
[-1, 0, 0, 0]
[1, 1]
[1, 0]
[0, 3]
[0, 1]
k:1
到当前马[1, 1]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:5
到前马[1, 1]时的q队列:
新增了:2个元素
===box===
[0, 2, 0, 2]
[2, 1, 0, 0]
[0, 0, 1, 3]
[-1, 0, 3, 0]
[1, 0]
[0, 3]
[0, 1]
[2, 3]
[3, 2]
k:1
到当前马[1, 0]的访问列表:
[0, 0, 0, 0]
[1, 1, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[1, 0]时的q队列:
新增了:2个元素
===box===
[0, 2, 4, 2]
[2, 1, 0, 0]
[0, 0, 1, 3]
[-1, 4, 3, 0]
[0, 3]
[0, 1]
[2, 3]
[3, 2]
[3, 1]
[0, 2]
k:1
到当前马[0, 3]的访问列表:
[0, 0, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[0, 2, 4, 2]
[2, 1, 0, 0]
[0, 0, 1, 3]
[-1, 4, 3, 0]
[0, 1]
[2, 3]
[3, 2]
[3, 1]
[0, 2]
k:1
到当前马[0, 1]的访问列表:
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 0]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:6
到前马[0, 1]时的q队列:
新增了:2个元素
===box===
[0, 2, 4, 2]
[2, 1, 0, 5]
[5, 0, 1, 3]
[-1, 4, 3, 0]
[2, 3]
[3, 2]
[3, 1]
[0, 2]
[1, 3]
[2, 0]
k:1
到当前马[2, 3]的访问列表:
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 0, 0, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[2, 3]时的q队列:
新增了:0个元素
===box===
[0, 2, 4, 2]
[2, 1, 0, 5]
[5, 0, 1, 3]
[-1, 4, 3, 0]
[3, 2]
[3, 1]
[0, 2]
[1, 3]
[2, 0]
k:1
到当前马[3, 2]的访问列表:
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[3, 2]时的q队列:
新增了:0个元素
===box===
[0, 2, 4, 2]
[2, 1, 0, 5]
[5, 0, 1, 3]
[-1, 4, 3, 0]
[3, 1]
[0, 2]
[1, 3]
[2, 0]
k:1
到当前马[3, 1]的访问列表:
[0, 1, 0, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[3, 1]时的q队列:
新增了:1个元素
===box===
[0, 2, 4, 2]
[2, 1, 6, 5]
[5, 0, 1, 3]
[-1, 4, 3, 0]
[0, 2]
[1, 3]
[2, 0]
[1, 2]
k:1
到当前马[0, 2]的访问列表:
[0, 1, 1, 1]
[1, 1, 0, 0]
[0, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[0, 2]时的q队列:
新增了:1个元素
===box===
[0, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 0]
[1, 3]
[2, 0]
[1, 2]
[2, 1]
k:1
到当前马[1, 3]的访问列表:
[0, 1, 1, 1]
[1, 1, 0, 1]
[0, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[1, 3]时的q队列:
新增了:0个元素
===box===
[0, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 0]
[2, 0]
[1, 2]
[2, 1]
k:1
到当前马[2, 0]的访问列表:
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[2, 0]时的q队列:
新增了:0个元素
===box===
[0, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 0]
[1, 2]
[2, 1]
k:1
到当前马[1, 2]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 0, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:1
加之后q的大小:3
到前马[1, 2]时的q队列:
新增了:2个元素
===box===
[8, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 8]
[2, 1]
[3, 3]
[0, 0]
k:1
到当前马[2, 1]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[2, 1]时的q队列:
新增了:0个元素
===box===
[8, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 8]
[3, 3]
[0, 0]
k:1
到当前马[3, 3]的访问列表:
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[8, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 8]
[0, 0]
k:1
到当前马[0, 0]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[8, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 8]
--===board-k===--
[8, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 8]
12---------searchEachHorseFinished---------


14---------searchEachHorse---------
当前马为:坐标:[3,2],等级:3,当前层级:0当前步数:0
k:3
到当前马[3, 2]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:0
加之后q的大小:3
到前马[3, 2]时的q队列:
新增了:3个元素
===box===
[0, 0, 0, 0]
[0, 1, 0, 1]
[1, 0, 0, 0]
[0, 0, -1, 0]
[2, 0]
[1, 3]
[1, 1]
k:3
到当前马[2, 0]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 0]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:2
加之后q的大小:4
到前马[2, 0]时的q队列:
新增了:2个元素
===box===
[0, 2, 0, 0]
[0, 1, 2, 1]
[1, 0, 0, 0]
[0, 0, -1, 0]
[1, 3]
[1, 1]
[1, 2]
[0, 1]
k:3
到当前马[1, 3]的访问列表:
[0, 0, 0, 0]
[0, 0, 0, 1]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[1, 3]时的q队列:
新增了:1个元素
===box===
[0, 2, 0, 0]
[0, 1, 2, 1]
[1, 3, 0, 0]
[0, 0, -1, 0]
[1, 1]
[1, 2]
[0, 1]
[2, 1]
k:3
到当前马[1, 1]的访问列表:
[0, 0, 0, 0]
[0, 1, 0, 1]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:3
加之后q的大小:6
到前马[1, 1]时的q队列:
新增了:3个元素
===box===
[0, 2, 0, 4]
[0, 1, 2, 1]
[1, 3, 0, 4]
[4, 0, -1, 0]
[1, 2]
[0, 1]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
k:3
到当前马[1, 2]的访问列表:
[0, 0, 0, 0]
[0, 1, 1, 1]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:8
到前马[1, 2]时的q队列:
新增了:3个元素
===box===
[5, 2, 0, 4]
[0, 1, 2, 1]
[1, 3, 0, 4]
[4, 5, -1, 5]
[0, 1]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
[3, 3]
[3, 1]
[0, 0]
k:3
到当前马[0, 1]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 0, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[0, 1]时的q队列:
新增了:1个元素
===box===
[5, 2, 0, 4]
[0, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[2, 1]
[2, 3]
[3, 0]
[0, 3]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
k:3
到当前马[2, 1]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 1, 0, 0]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:8
到前马[2, 1]时的q队列:
新增了:1个元素
===box===
[5, 2, 7, 4]
[0, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[2, 3]
[3, 0]
[0, 3]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
[0, 2]
k:3
到当前马[2, 3]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 1, 0, 1]
[0, 0, 1, 0]
-------findPostion-------
加之前q的大小:7
加之后q的大小:7
到前马[2, 3]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[0, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[3, 0]
[0, 3]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
[0, 2]
k:3
到当前马[3, 0]的访问列表:
[0, 1, 0, 0]
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:6
加之后q的大小:6
到前马[3, 0]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[0, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[0, 3]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
[0, 2]
k:3
到当前马[0, 3]的访问列表:
[0, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 0, 1, 0]
-------findPostion-------
加之前q的大小:5
加之后q的大小:5
到前马[0, 3]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[0, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[3, 3]
[3, 1]
[0, 0]
[2, 2]
[0, 2]
k:3
到当前马[3, 3]的访问列表:
[0, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 0, 1, 1]
-------findPostion-------
加之前q的大小:4
加之后q的大小:4
到前马[3, 3]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[0, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[3, 1]
[0, 0]
[2, 2]
[0, 2]
k:3
到当前马[3, 1]的访问列表:
[0, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:4
到前马[3, 1]时的q队列:
新增了:1个元素
===box===
[5, 2, 7, 4]
[8, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[0, 0]
[2, 2]
[0, 2]
[1, 0]
k:3
到当前马[0, 0]的访问列表:
[1, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 0, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:3
加之后q的大小:3
到前马[0, 0]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[8, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[2, 2]
[0, 2]
[1, 0]
k:3
到当前马[2, 2]的访问列表:
[1, 1, 0, 1]
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:2
加之后q的大小:2
到前马[2, 2]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[8, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[0, 2]
[1, 0]
k:3
到当前马[0, 2]的访问列表:
[1, 1, 1, 1]
[0, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
-------findPostion-------
加之前q的大小:1
加之后q的大小:1
到前马[0, 2]时的q队列:
新增了:0个元素
===box===
[5, 2, 7, 4]
[8, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
[1, 0]
k:3
到当前马[1, 0]的访问列表:
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[2, 1, 3, 2]
[3, 1, 1, 1]
[1, 1, 2, 2]
[2, 2, -1, 2]
--===board-k===--
[5, 2, 7, 4]
[8, 1, 2, 1]
[1, 3, 6, 4]
[4, 5, -1, 5]
14---------searchEachHorseFinished---------

[-1, 4, 3, 8]
[5, 6, 1, 3]
[2, 1, 7, 5]
[8, 2, 4, 2]

[1, -1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]

[1, 1, -1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]

[2, 1, 1, -1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 2]

[3, 3, 1, 1]
[2, -1, 2, 1]
[1, 2, 2, 1]
[1, 1, 1, 3]

[1, 1, 1, 2]
[1, 1, 1, -1]
[1, 1, 1, 1]
[2, 2, 1, 1]

[2, 1, 4, 3]
[4, 1, 1, 1]
[-1, 3, 2, 3]
[3, 2, 1, 2]

[3, 4, 1, 2]
[1, 1, 1, 4]
[3, 2, 3, -1]
[2, 1, 2, 3]

[8, 2, 4, 2]
[2, 1, 6, 5]
[5, 7, 1, 3]
[-1, 4, 3, 8]

[2, 1, 3, 2]
[3, 1, 1, 1]
[1, 1, 2, 2]
[2, 2, -1, 2]

---------checkBoard---------
[22, 17, 18, 21]
[21, 13, 16, 17]
[15, 20, 21, 17]
[20, 17, 14, 25]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
13
能将所有马跳到同一位置,且最少需要的总步数为:13
 

3.带数据分析完整代码

import javax.security.auth.kerberos.KerberosCredMessage;
import java.util.*;

public class test34 {

    public static  void main(String[] args) {
        /*
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入棋盘行数m:");
        int m = sc.nextInt();
        System.out.println("请输入棋盘列数n:");
        int n = sc.nextInt();
        System.out.println("请输入马在棋盘上的分布:");
        int[][] horses = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                horses[i][j] = sc.nextInt();
            }
        }
        sc.close();
        System.out.println(Arrays.deepToString(horses));
        */
        int m = 4;
        int n = 4;
        int[][] horse = {{1,9,9,7},{0,3,0,6},{2,0,0,2},{1,0,3,0}};

        ArrayList<Horse> horses = turnToHorse(horse);
        int minStep = searhEachHorse(horses,m,n);
        if (minStep==-1){
            System.out.println("不能将所有马跳到同一位置");
        }else {
            System.out.println("能将所有马跳到同一位置,且最少需要的总步数为:"+minStep);
        }
    }

    private static int searhEachHorse(ArrayList<Horse> horses, int m, int n) {
        //每一匹马的位置和步数board组成所有马的boards
        ArrayList<int[][]> boards = new ArrayList<>();

        for (int i = 0; i < horses.size(); i++) {//每一匹马
            //先看一匹
            //for (int i = 1; i < 2; i++) {
                Horse horse = horses.get(i);
            if (horse.k!=0){

                //每一匹马都给个board,存的是每个位置所需要的步数step(step根据k算出每个位置的最小步数!)
                int[][] board = new int[m][n];
                int[][] boardk = new int[m][n];
                int k =horse.k;//跳步级别

                System.out.println("\n"+i+"---------searchEachHorse---------");

                System.out.print("当前马为:"+horse.toString());
                int[] horseZk = horse.getPostion();

                int[][] visit = new int[m][n];
                int[][] visited;

                Queue<int[]> q = new LinkedList<>();//要随调用传值
                q.add(horseZk);

                int[][] box = new int[m][n];//传值
                int level = 0;
                board = findPostion(horse,m,n,visit,q,box,level);//找完位置返回含有step信息的board
                boardk = boardCal(board,k);


                System.out.println("--===board-k===--");
                for (int[] row : board) {
                    System.out.println(Arrays.toString(row));
                }
                boards.add(boardk);
                System.out.println(i+"---------searchEachHorseFinished---------\n");
            }
        }

        //获得了所有马在棋盘上的位置和步数信息
        for (int[][] board : boards) {
            for (int[] row : board) {
                System.out.print(Arrays.toString(row)+"\n");
            }
            System.out.println();
        }
        int totalStep = CheckBoards(m,n,boards);
        return totalStep;
    }

    private static int CheckBoards(int m,int n,ArrayList<int[][]> boards) {
        System.out.println("---------checkBoard---------");
        int totalSteps = 0 ;
        int[][] exist = new int[m][n];
        boolean allCanArr = true;
        for (int i = 0; i < m; i++) {
            Arrays.fill(exist[i], 1); // 填充每一行
        }//默认都存在
        int[][] AddStep = new int[m][n];
        for (int i = 0; i <m; i++) {
            for (int j = 0; j < n; j++) {
                int addSteps = 0;
                for (int k = 0; k < boards.size(); k++) {
                    //System.out.println(boards.get(k)[i][j]);
                    if (boards.get(k)[i][j] == 0) {//检验是否存在有马到不了的位置
                        exist[i][j] = 0;
                    }
                    addSteps += boards.get(k)[i][j];
                }
                AddStep[i][j] = addSteps;
            }
        }

        for (int[] row : AddStep) {
            for (int val : row) {
                if (val == 1) {
                    allCanArr = false;
                }
            }
            System.out.println(Arrays.toString(row));
        }
        for (int[] existBoard : exist) {
            System.out.println(Arrays.toString(existBoard));
        }
        int minStep = Integer.MAX_VALUE;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j <n; j++) {
                minStep = Math.min(minStep,AddStep[i][j]);
            }
        }
        totalSteps = minStep;
        System.out.println(totalSteps);
        if (allCanArr) {
            return totalSteps;
        }else{
            return -1;
        }
    }

    private static int[][] boardCal(int[][] board, int k) {
        int[][] boardk = new int[board.length][board[0].length];
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                boardk[i][j] = board[i][j];
                if (boardk[i][j] <= k&&boardk[i][j] !=-1) {//=============================2
                    boardk[i][j]= 1;
                } else if (boardk[i][j] > k) {
                    /*小于:eg:k=2,step=5=2+2+1,step=7=2+2+2+1*/
                    int r = board[i][j]%k;
                    if (r==0){
                        boardk[i][j] =board[i][j]/k;
                    }else {
                        boardk[i][j] = board[i][j]/k+ 1;
                    }
                }
            }
        }
        for (int[] row : boardk) {
            System.out.println(Arrays.toString(row));
        }
        return boardk;
    }

    private static ArrayList<Horse> turnToHorse(int[][] horse) {
        ArrayList<Horse> horses = new ArrayList<>();
        for (int i = 0; i < horse.length; i++) {
            for (int j = 0; j < horse[i].length; j++) {
                int[] postion =new int[2];
                int k = 0;
                postion[0] = i;
                postion[1] = j;
                k = horse[i][j];
                horses.add(new Horse(postion,k,0,0));
            }
        }
        return horses;
    }

    static int[][] DIRECTION={{1,2},{1,-2},
            {2,1},{2,-1},
            {-1,2},{-1,-2},
            {-2,1},{-2,-1}};




    static ArrayList<int[]> postions = new ArrayList<>();//协助观察
    private static int[][] findPostion(Horse horse,int m,int n,int[][] visit,Queue<int[]> q,int[][]box,int level ) {

        //变化量:step、level注意传值
        int k = horse.k;
        System.out.println("k:"+k);

        box[horse.postion[0]][horse.postion[1]] = -1;//=============================1

        while (!q.isEmpty()) {
            //队列中遍历
            int[] temp = q.poll();
            visit[temp[0]][temp[1]] = 1;


            ///*
            System.out.println("到当前马"+Arrays.toString(temp)+"的访问列表:");
            for (int[] row : visit) {
                System.out.println(Arrays.toString(row));
            }
            if (Arrays.stream(visit)
                    .flatMapToInt(Arrays::stream) // 将二维数组扁平化为一维流
                    .allMatch(value -> value == 1)){
                return visit;
            }
           // */
            System.out.println("-------findPostion-------");
            int size = q.size();
            System.out.println("加之前q的大小:"+size);

            for (int[] direction : DIRECTION) {

                int x = temp[0]+ direction[0];
                int y = temp[1] + direction[1];
                //System.out.println("("+x+","+y+")");
                int[] Z = {x,y};
                boolean contains = false;
                for (int[] currentArray : q) {
                    if (Arrays.equals(currentArray, Z)) {
                        contains = true; // 找到相同的数组
                    }
                }
                if (x>=0&&x<n&&y>=0&&y<m&&visit[x][y]==0&&!contains) {//只加入没去过的点
                    postions.add(Z);//协助观察
                    q.add(Z);

                }
            }
            int size1 = q.size();
            System.out.println("加之后q的大小:"+size1);
            System.out.println("到前马"+Arrays.toString(temp)+"时的q队列:");
            int newadd = size1 - size;
            System.out.println("新增了:"+newadd+"个元素");
            /*写到这里了,层级的自增!!!!!!!!!*/
            if(newadd>0){
                level++;
            }
            List<int[]> list = new ArrayList<>(q);
            for (int i = size1-1; i >=size; i--) {
                box[list.get(i)[0]][list.get(i)[1]] = level;
            }

            System.out.println("===box===");
            for (int[] row : box) {
                System.out.println(Arrays.toString(row));
            }

            for (int[] element : q) {
                System.out.println(Arrays.toString(element));
            }
            findPostion(horse,m,n,visit,q,box,level);
        }
        //return visit;
        return box;
    }

    public static class Horse{
        int[] postion;
        int k;
        int level;
        int step;
        public Horse(int[] postion, int k, int level,int step) {
            this.postion = postion;
            this.k = k;
            this.level = level;
            this.step = step;
        }
        public String toString(){
            return "坐标:["+postion[0]+","+postion[1]+"],等级:"+k+",当前层级:"+level+"当前步数:"+step+"\n";
        }

        public int getK(){
            return k;
        }
        public int getLevel(){
            return level;
        }
        public int[] getPostion(){
            return postion;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能在专业领域的斗争

介绍 ChatGPT 等大型语言模型 (LLM) 在用自然语言讨论一般话题的能力方面令人印象深刻。然而&#xff0c;他们在医学、金融和法律等专业领域却举步维艰。这是由于缺乏真正的理解&#xff0c;并且注重模仿而不是智力。 大语言模型正处于炒作的顶峰。由于能够用自然语言回答和讨…

“Docker中部署Kibana:步骤与指南“

博主这篇文章是跟Elasticsearch那篇文章是有关系的&#xff0c;建议大家先去看&#xff1a; 轻松上手&#xff1a;Docker部署Elasticsearch&#xff0c;高效构建搜索引擎环境_docker 启动 es-CSDN博客 这篇博文&#xff0c;还有镜像下载不下来的情况&#xff0c;大家可以去看…

攻破:重定向 缓冲区

文章目录 前言&#xff1a;认识读文件read认识重定向&&缓冲区重定向现象及分析&#xff1a;dup2的介绍&#xff1a; 缓冲区的引入&#xff1a;缓冲区的理解&#xff1a; 前言&#xff1a; ​ 从上一章开始&#xff0c;我们进入了文件IO的学习&#xff0c;认识了文件描…

浅谈C# RabbitMQ

一、基本介绍 RabbitMQ——Rabbit Message Queue的简写&#xff0c;但不能仅仅理解其为消息队列&#xff0c;消息代理更合适。 RabbitMQ 是一个由 Erlang 语言开发的AMQP&#xff08;高级消息队列协议&#xff09;的开源实现&#xff0c;其内部结构如下&#xff1a; RabbitMQ作…

今年秋招太吓人了。(20届,在得物做Java开发)

有个学弟来问我诉苦最近好忙好累&#xff0c;说竞争压力特别大&#xff0c;让我给点建议&#xff0c;要不要放弃实习闷头搞秋招&#xff0c;我才意识到时间太快了&#xff0c;想想我都毕业几年了&#xff0c;感慨颇深&#xff0c;整理一下我的求职经验和目前的心得吧&#xff0…

SpingBoot集成kafka-发送读取消息示例

SpingBoot集成kafka开发 kafka的几个常见概念 1、springboot和kafka对应版本&#xff08;重要&#xff09;2、创建springboot项目&#xff0c;引入kafka依赖2.1、生产者EventProducer2.2、消费者EventConsumer2.3、启动生产者的方法SpringBoot01KafkaBaseApplication2.4、appli…

监控电脑屏幕的软件叫什么?6款电脑屏幕监控软件分享!

监控电脑屏幕的软件可以帮助企业和家长监控电脑的使用情况&#xff0c;确保工作和学习的效率与安全。 以下是六款常用的电脑屏幕监控软件及其特点&#xff1a; 1. Keylogger 特点&#xff1a;专注于企业数据安全和员工上网行为管理。 功能&#xff1a;全面的屏幕监控、上网…

Redis持久化(RDB、AOF、混合持久化)

目录 1、持久化机制 &#xff08;1&#xff09;RDB &#xff08;2&#xff09;AOF 2、混合持久化 3、总结 ❓为什么需要持久化&#xff1f; Redis 是一个基于内存的键值存储系统&#xff0c;它提供了非常快的数据访问速度&#xff0c;因为它不需要像传统的磁盘存储那样进…

竞猜足球核心算法源码

需要实现的功能如下&#xff1a; 仅用于学习 竞猜足球核心算法源码 package com.lotterysource.portsadmin.service; import com.aliyun.oss.common.utils.DateUtil; import com.fasterxml.jackson.core.type.TypeReference; import com.lotterysource.portsadmin.dbprovid…

进存销系统

摘 要 伴随着我国全面推动信息化的趋势&#xff0c;我国的很多行业都在朝着互联网的方向进发。商品销售行业也有很多挑战。这次论文介绍的进存销系统就是为了能够解决当前传统商品进存销存在的问题&#xff0c;使得商品进存销能够更加有效率。电商智能化管理必不可少的帮手有进…

功能安全实战系列02-RamTst(RamTest)开发介绍

本文框架 前言1. What(RamTst相关概念)1.1 后台检测1.2 前台检测1.3 RamTst对应状态机2.How?2.1 接口调用2.2 配置开发2.3 测试模式选择前言 在本系列笔者将结合工作中对功能安全实战部分的开发经验进一步介绍常用,包括Memory(Flash,Ram)失效检测,程序运行时序时间检测,及…

数字模拟IC设计前端、后端、前仿、后仿新版虚拟机

虚拟化平台&#xff1a;VMware Workstation 15 Pro以上版本 操作系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 一、射频模拟IC设计必备软件 Cadence IC06.18.350/IC23.10.080&#xff08;virtuoso&#xff09; Cadence SPECTRE23.10.538-isr10 Cadence ASSURA04.…

Python优化算法15——麻雀搜索算法(SSA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

Mozilla为本地音频到文本翻译开发Whisperfile引擎

Mozilla Ocho 小组正进行 Mozilla 的"创新和实验"。Llamafile 用于将大型语言模型以单个文件的形式发布&#xff0c;以便在不同的硬件/软件间轻松执行。Whisperfile 是一项将音频轻松转化为文本的新引擎。 正如其名称所暗示的&#xff0c;Whisperfile 是围绕 OpenAI…

嵌入式UI开发-lvgl+wsl2+vscode系列:10、控件(Widgets)(三)

1、scale&#xff08;标尺&#xff09; 示例1 #include "../../lv_examples.h" #if LV_USE_SCALE && LV_BUILD_EXAMPLES/*** 简单的水平标尺*/ void lv_example_scale_1(void) {lv_obj_t * scale lv_scale_create(lv_screen_active());lv_obj_set_size(sca…

MyBatis源码(6)拦截器

1、目标 本文的主要目标是学习MyBatis拦截器的源码&#xff0c;本文将以插入操作为例debug拦截器相关的源码 2、拦截器源码分析 调用mapper接口的insert插入记录方法&#xff0c;会调用SqlSession对象的insert方法 SqlSession执行insert方法 Spring容器会创建SqlSessionTemp…

Python画笔案例-011 绘制草帽

1、绘制草帽 通过 python 的turtle 库绘制一个草帽的图案&#xff0c;如下图&#xff1a; 2、实现代码 绘制以上草帽的图案&#xff0c;代码如下&#xff1a; """草帽.py """ import turtle # 导入海龟模块turtle.delay(20) …

多动症的孩子有哪些症状表现?

在星启帆自闭症儿童康复机构&#xff0c;我们不仅关注自闭症儿童的成长与康复&#xff0c;也深刻认识到多动症对儿童日常生活、学习和社交的深远影响。多动症&#xff0c;全称注意缺陷多动障碍&#xff0c;是一种常见于儿童时期的神经发育性疾病&#xff0c;其症状表现多种多样…

Python优化算法16——鲸鱼优化算法(WOA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

ChatGPT不同模型在论文写作中的优势和应用

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 ChatGPT在论文写作中的应用日益广泛。作为OpenAI开发的先进语言模型&#xff0c;ChatGPT有多个版本&#xff0c;包括GPT-3.5、GPT-4.0和GPT-4.0-mini&#xff0c;每个版本在性能和应用方…