public boolean travel(int startX, int startY) {

        // 当前出口的位置集
        Point[] nexts;

        // 记录每个出口的可用出口個數
        int[] exits;

        //当前位置
        Point current = new Point(startX, startY);

        board[current.x][current.y] = 1;

        //当前步的编号
        for(int m = 2; m <= Math.pow(board.length, 2); m++) {

            //清空每个出口的可用出口数
            nexts = new Point[direct];
            exits = new int[direct];

            int count = 0;
            // 試探八個方向
            for(int k = 0; k < direct; k++) {
                int tmpX = current.x + relatives[k].x;
                int tmpY = current.y + relatives[k].y;

                // 如果這個方向可走，記錄下來
                if(accessable(tmpX, tmpY)) {
                    nexts[count] = new Point(tmpX,tmpY);
                    // 可走的方向加一個
                    count++;
                }
            }

            //可用出口数最少的出口在exits中的索引
            int minI = 0;
            if(count == 0) {
                return false;
            } else {
                // 记录每个出口的可用出口數
                for(int l = 0; l < count; l++) {
                    for(int k = 0; k < direct; k++) {
                        int tmpX = nexts[l].x + relatives[k].x;
                        int tmpY = nexts[l].y + relatives[k].y;
                        if(accessable(tmpX, tmpY)){
                            exits[l]++;
                        }
                    }
                }

                // 從可走的方向中尋找最少出路的方向
                int tmp = exits[0];
                for(int l = 1; l < count; l++) {
                    if(exits[l] < tmp) {
                        tmp = exits[l];
                        minI = l;
                    }
                }
            }

            // 走最少出路的方向
            current = new Point(nexts[minI]);
            board[current.x][current.y] = m;
        }

        return true;
    }