Algorithm of N queens

前端 未结 5 704
有刺的猬
有刺的猬 2021-01-13 04:47
Algorithm NQueens ( k, n) //Prints all Solution to the n-queens problem
{
    for i := 1 to n do
    {
        if Place (k, i) then
        {
            x[k] := i;
         


        
5条回答
  •  迷失自我
    2021-01-13 05:13

    I've just decided to code my solution of N Queens Puzzle in Python language, down below is code, it is quite fast, in dozens of seconds it finds all solutions for 1-8 queens and in few minutes for 9 queens. It tests agains reference numbers in Counting Solutions section of wiki.

    Solution uses recursive back-tracking approach and fast numpy library, also it searches solutions only in lexicographical order of combinations, all permutations of queens in same positions are considered to be same and all permutations except first are not searched at all. So algorithm is quite fast.

    Try it online!

    def Main():
        import numpy as np
        
        con_width = 80 # Console width
    
        for h, w, n, rcnt in [
            # h - heignt, w - width, n - num queens
            # Create all tests here
        ] + [(i + 1, i + 1, i + 1, rcnt) for i, rcnt in enumerate([
            # See https://oeis.org/A000170/b000170.txt
            1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512, 95815104, 666090624, 4968057848, 39029188884,
        ])]:
            # Create empty board
            board = np.zeros([h, w], dtype = np.int8)
            sols = {}
            # Recursive function for placing next queen using back-propagation
            def Solve(*, qcnt = 0, fy = 0, fx = 0):
                nonlocal board, sols
                if qcnt >= n:
                    sola = np.nonzero(board > 0)
                    sol = tuple((y, x) for y, x in zip(sola[0].tolist(), sola[1].tolist()))
                    assert sol not in sols
                    sols[sol] = np.copy(board)
                    return
                # Find coordinates of all available positions (zeroes)
                av = np.nonzero(board == 0)
                # Skip previous placed results
                ava = np.vstack(av).T
                avc = np.count_nonzero((ava[:, 0] < fy) | ((ava[:, 0] == fy) & (ava[:, 1] < fx)))
                av = (av[0][avc:], av[1][avc:])
                
                for i in range(av[0].shape[0]):
                    # Get next available position
                    y, x = av[0][i], av[1][i]
                    assert board[y, x] == 0, (y, x, board[y, x])
                    
                    # Try placing queen into (y, x)
                    
                    ps = np.zeros([2, 0], dtype = np.int32)
                    
                    # Same row
                    ps = np.concatenate((ps, [np.full([w], y), np.arange(w)]), 1)
                    # Same column
                    ps = np.concatenate((ps, [np.arange(h), np.full([h], x)]), 1)
                    # Same primary diagonal
                    if y < x:
                        dlen = min(h, w - (x - y))
                        ps = np.concatenate((ps, [np.arange(dlen), np.arange(x - y, x - y + dlen)]), 1)
                    else:
                        dlen = min(w, h - (y - x))
                        ps = np.concatenate((ps, [np.arange(y - x, y - x + dlen), np.arange(dlen)]), 1)
                    # Same secondary diagonal
                    dlen = min(h, w, x + y + 1)
                    ps = np.concatenate((ps, [
                        np.arange((x + y) - min(x + y, w - 1), min(x + y, h - 1) + 1),
                        np.arange(min(x + y, w - 1), max(0, x + y - (h - 1)) - 1, -1),
                    ]), 1)
                    
                    ps = (ps[0, :].astype(np.int32), ps[1, :].astype(np.int32))
                    
                    #print('placing', qcnt + 1, '(', y, x, ')\n', ps, '\n', board)
                    # Backup current values in positions
                    cvs = np.copy(board[ps])
                    # Attack all positions
                    board[ps] = -1
                    # Place queen
                    board[y, x] = qcnt + 1
                    #print('placed\n', board)
                    # Recurse
                    Solve(qcnt = qcnt + 1, fy = (y + 1, y)[bool(x + 1 < w)], fx = (x + 1) % w)
                    # Undo placed queen and attacked positions
                    board[ps] = cvs
            
            print(f'Testing: h = {h}, w = {w}, n = {n}, sols = {rcnt}\n')
            
            Solve()
            
            lcnt = con_width // (w + 1)
            sols = sorted(sols.items(), key = lambda e: e[0])
            for ibl in range((len(sols) + lcnt - 1) // lcnt):
                for l in range(h):
                    for i in range(ibl * lcnt, min((ibl + 1) * lcnt, len(sols))):
                        sol = sols[i][1]
                        print(''.join([('.', 'X')[e] for e in (sol[l, :] > 0).astype(np.uint8).tolist()]) + ' ', end = '')
                    print()
                print()
            
            num_sols = len(sols)
            print(f'Result: h = {h}, w = {w}, n = {n}, sols = {num_sols}')
            print('-' * con_width)
            if rcnt is not None:
                assert num_sols == rcnt, (h, w, n, num_sols, rcnt)
                            
    Main()
    

    It outputs:

    Testing: h = 1, w = 1, n = 1, sols = 1
    
    X 
    
    Result: h = 1, w = 1, n = 1, sols = 1
    --------------------------------------------------------------------------------
    Testing: h = 2, w = 2, n = 2, sols = 0
    
    Result: h = 2, w = 2, n = 2, sols = 0
    --------------------------------------------------------------------------------
    Testing: h = 3, w = 3, n = 3, sols = 0
    
    Result: h = 3, w = 3, n = 3, sols = 0
    --------------------------------------------------------------------------------
    Testing: h = 4, w = 4, n = 4, sols = 2
    
    .X.. ..X. 
    ...X X... 
    X... ...X 
    ..X. .X.. 
    
    Result: h = 4, w = 4, n = 4, sols = 2
    --------------------------------------------------------------------------------
    Testing: h = 5, w = 5, n = 5, sols = 10
    
    X.... X.... .X... .X... ..X.. ..X.. ...X. ...X. ....X ....X 
    ..X.. ...X. ...X. ....X X.... ....X X.... .X... .X... ..X.. 
    ....X .X... X.... ..X.. ...X. .X... ..X.. ....X ...X. X.... 
    .X... ....X ..X.. X.... .X... ...X. ....X ..X.. X.... ...X. 
    ...X. ..X.. ....X ...X. ....X X.... .X... X.... ..X.. .X... 
    
    Result: h = 5, w = 5, n = 5, sols = 10
    --------------------------------------------------------------------------------
    Testing: h = 6, w = 6, n = 6, sols = 4
    
    .X.... ..X... ...X.. ....X. 
    ...X.. .....X X..... ..X... 
    .....X .X.... ....X. X..... 
    X..... ....X. .X.... .....X 
    ..X... X..... .....X ...X.. 
    ....X. ...X.. ..X... .X.... 
    
    Result: h = 6, w = 6, n = 6, sols = 4
    --------------------------------------------------------------------------------
    Testing: h = 7, w = 7, n = 7, sols = 40
    
    X...... X...... X...... X...... .X..... .X..... .X..... .X..... .X..... .X..... 
    ..X.... ...X... ....X.. .....X. ...X... ...X... ....X.. ....X.. ....X.. .....X. 
    ....X.. ......X .X..... ...X... X...... .....X. X...... ..X.... ......X ..X.... 
    ......X ..X.... .....X. .X..... ......X X...... ...X... X...... ...X... ......X 
    .X..... .....X. ..X.... ......X ....X.. ..X.... ......X ......X X...... ...X... 
    ...X... .X..... ......X ....X.. ..X.... ....X.. ..X.... ...X... ..X.... X...... 
    .....X. ....X.. ...X... ..X.... .....X. ......X .....X. .....X. .....X. ....X.. 
    
    .X..... ..X.... ..X.... ..X.... ..X.... ..X.... ..X.... ...X... ...X... ...X... 
    ......X X...... X...... ....X.. .....X. ......X ......X X...... X...... .X..... 
    ....X.. .....X. .....X. ......X .X..... .X..... ...X... ..X.... ....X.. ......X 
    ..X.... .X..... ...X... .X..... ....X.. ...X... X...... .....X. .X..... ....X.. 
    X...... ....X.. .X..... ...X... X...... .....X. ....X.. .X..... .....X. ..X.... 
    .....X. ......X ......X .....X. ...X... X...... .X..... ......X ..X.... X...... 
    ...X... ...X... ....X.. X...... ......X ....X.. .....X. ....X.. ......X .....X. 
    
    ...X... ...X... ...X... ....X.. ....X.. ....X.. ....X.. ....X.. ....X.. .....X. 
    .....X. ......X ......X X...... X...... .X..... ..X.... ......X ......X X...... 
    X...... ..X.... ....X.. ...X... .....X. .....X. X...... .X..... .X..... ..X.... 
    ..X.... .....X. .X..... ......X ...X... ..X.... .....X. ...X... .....X. ....X.. 
    ....X.. .X..... .....X. ..X.... .X..... ......X ...X... .....X. ..X.... ......X 
    ......X ....X.. X...... .....X. ......X ...X... .X..... X...... X...... .X..... 
    .X..... X...... ..X.... .X..... ..X.... X...... ......X ..X.... ...X... ...X... 
    
    .....X. .....X. .....X. .....X. .....X. .....X. ......X ......X ......X ......X 
    .X..... ..X.... ..X.... ..X.... ...X... ...X... .X..... ..X.... ...X... ....X.. 
    ....X.. X...... ....X.. ......X .X..... ......X ...X... .....X. X...... ..X.... 
    X...... ...X... ......X ...X... ......X X...... .....X. .X..... ....X.. X...... 
    ...X... ......X X...... X...... ....X.. ..X.... X...... ....X.. .X..... .....X. 
    ......X ....X.. ...X... ....X.. ..X.... ....X.. ..X.... X...... .....X. ...X... 
    ..X.... .X..... .X..... .X..... X...... .X..... ....X.. ...X... ..X.... .X..... 
    
    Result: h = 7, w = 7, n = 7, sols = 40
    --------------------------------------------------------------------------------
    Testing: h = 8, w = 8, n = 8, sols = 92
    
    X....... X....... X....... X....... .X...... .X...... .X...... .X...... 
    ....X... .....X.. ......X. ......X. ...X.... ....X... ....X... .....X.. 
    .......X .......X ...X.... ....X... .....X.. ......X. ......X. X....... 
    .....X.. ..X..... .....X.. .......X .......X X....... ...X.... ......X. 
    ..X..... ......X. .......X .X...... ..X..... ..X..... X....... ...X.... 
    ......X. ...X.... .X...... ...X.... X....... .......X .......X .......X 
    .X...... .X...... ....X... .....X.. ......X. .....X.. .....X.. ..X..... 
    ...X.... ....X... ..X..... ..X..... ....X... ...X.... ..X..... ....X... 
    
    .X...... .X...... .X...... .X...... ..X..... ..X..... ..X..... ..X..... 
    .....X.. ......X. ......X. .......X X....... ....X... ....X... ....X... 
    .......X ..X..... ....X... .....X.. ......X. .X...... .X...... ......X. 
    ..X..... .....X.. .......X X....... ....X... .......X .......X X....... 
    X....... .......X X....... ..X..... .......X X....... .....X.. ...X.... 
    ...X.... ....X... ...X.... ....X... .X...... ......X. ...X.... .X...... 
    ......X. X....... .....X.. ......X. ...X.... ...X.... ......X. .......X 
    ....X... ...X.... ..X..... ...X.... .....X.. .....X.. X....... .....X.. 
    
    ..X..... ..X..... ..X..... ..X..... ..X..... ..X..... ..X..... ..X..... 
    ....X... .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. 
    .......X .X...... .X...... .X...... ...X.... ...X.... .......X .......X 
    ...X.... ....X... ......X. ......X. X....... .X...... X....... X....... 
    X....... .......X X....... ....X... .......X .......X ...X.... ....X... 
    ......X. X....... ...X.... X....... ....X... ....X... ......X. ......X. 
    .X...... ......X. .......X .......X ......X. ......X. ....X... .X...... 
    .....X.. ...X.... ....X... ...X.... .X...... X....... .X...... ...X.... 
    
    ..X..... ..X..... ..X..... ..X..... ...X.... ...X.... ...X.... ...X.... 
    .....X.. ......X. ......X. .......X X....... X....... .X...... .X...... 
    .......X .X...... .X...... ...X.... ....X... ....X... ....X... ......X. 
    .X...... .......X .......X ......X. .......X .......X .......X ..X..... 
    ...X.... ....X... .....X.. X....... .X...... .....X.. .....X.. .....X.. 
    X....... X....... ...X.... .....X.. ......X. ..X..... X....... .......X 
    ......X. ...X.... X....... .X...... ..X..... ......X. ..X..... X....... 
    ....X... .....X.. ....X... ....X... .....X.. .X...... ......X. ....X... 
    
    ...X.... ...X.... ...X.... ...X.... ...X.... ...X.... ...X.... ...X.... 
    .X...... .X...... .X...... .X...... .....X.. .....X.. .....X.. ......X. 
    ......X. ......X. .......X .......X X....... .......X .......X X....... 
    ..X..... ....X... ....X... .....X.. ....X... .X...... ..X..... .......X 
    .....X.. X....... ......X. X....... .X...... ......X. X....... ....X... 
    .......X .......X X....... ..X..... .......X X....... ......X. .X...... 
    ....X... .....X.. ..X..... ....X... ..X..... ..X..... ....X... .....X.. 
    X....... ..X..... .....X.. ......X. ......X. ....X... .X...... ..X..... 
    
    ...X.... ...X.... ...X.... ...X.... ...X.... ...X.... ....X... ....X... 
    ......X. ......X. ......X. .......X .......X .......X X....... X....... 
    ..X..... ....X... ....X... X....... X....... ....X... ...X.... .......X 
    .......X .X...... ..X..... ..X..... ....X... ..X..... .....X.. ...X.... 
    .X...... .....X.. X....... .....X.. ......X. X....... .......X .X...... 
    ....X... X....... .....X.. .X...... .X...... ......X. .X...... ......X. 
    X....... ..X..... .......X ......X. .....X.. .X...... ......X. ..X..... 
    .....X.. .......X .X...... ....X... ..X..... .....X.. ..X..... .....X.. 
    
    ....X... ....X... ....X... ....X... ....X... ....X... ....X... ....X... 
    X....... .X...... .X...... .X...... .X...... ..X..... ..X..... ..X..... 
    .......X ...X.... ...X.... .....X.. .......X X....... X....... .......X 
    .....X.. .....X.. ......X. X....... X....... .....X.. ......X. ...X.... 
    ..X..... .......X ..X..... ......X. ...X.... .......X .X...... ......X. 
    ......X. ..X..... .......X ...X.... ......X. .X...... .......X X....... 
    .X...... X....... .....X.. .......X ..X..... ...X.... .....X.. .....X.. 
    ...X.... ......X. X....... ..X..... .....X.. ......X. ...X.... .X...... 
    
    ....X... ....X... ....X... ....X... ....X... ....X... ....X... ....X... 
    ......X. ......X. ......X. ......X. ......X. ......X. .......X .......X 
    X....... X....... .X...... .X...... .X...... ...X.... ...X.... ...X.... 
    ..X..... ...X.... ...X.... .....X.. .....X.. X....... X....... X....... 
    .......X .X...... .......X ..X..... ..X..... ..X..... ..X..... ......X. 
    .....X.. .......X X....... X....... X....... .......X .....X.. .X...... 
    ...X.... .....X.. ..X..... ...X.... .......X .....X.. .X...... .....X.. 
    .X...... ..X..... .....X.. .......X ...X.... .X...... ......X. ..X..... 
    
    .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. 
    X....... .X...... .X...... ..X..... ..X..... ..X..... ..X..... ..X..... 
    ....X... ......X. ......X. X....... X....... X....... ....X... ....X... 
    .X...... X....... X....... ......X. .......X .......X ......X. .......X 
    .......X ..X..... ...X.... ....X... ...X.... ....X... X....... X....... 
    ..X..... ....X... .......X .......X .X...... .X...... ...X.... ...X.... 
    ......X. .......X ....X... .X...... ......X. ...X.... .X...... .X...... 
    ...X.... ...X.... ..X..... ...X.... ....X... ......X. .......X ......X. 
    
    .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. .....X.. 
    ..X..... ..X..... ..X..... ...X.... ...X.... ...X.... ...X.... .......X 
    ......X. ......X. ......X. X....... .X...... ......X. ......X. .X...... 
    .X...... .X...... ...X.... ....X... .......X X....... X....... ...X.... 
    ...X.... .......X X....... .......X ....X... ..X..... .......X X....... 
    .......X ....X... .......X .X...... ......X. ....X... .X...... ......X. 
    X....... X....... .X...... ......X. X....... .X...... ....X... ....X... 
    ....X... ...X.... ....X... ..X..... ..X..... .......X ..X..... ..X..... 
    
    ......X. ......X. ......X. ......X. ......X. ......X. ......X. ......X. 
    X....... .X...... .X...... ..X..... ..X..... ...X.... ...X.... ....X... 
    ..X..... ...X.... .....X.. X....... .......X .X...... .X...... ..X..... 
    .......X X....... ..X..... .....X.. .X...... ....X... .......X X....... 
    .....X.. .......X X....... .......X ....X... .......X .....X.. .....X.. 
    ...X.... ....X... ...X.... ....X... X....... X....... X....... .......X 
    .X...... ..X..... .......X .X...... .....X.. ..X..... ..X..... .X...... 
    ....X... .....X.. ....X... ...X.... ...X.... .....X.. ....X... ...X.... 
    
    .......X .......X .......X .......X 
    .X...... .X...... ..X..... ...X.... 
    ...X.... ....X... X....... X....... 
    X....... ..X..... .....X.. ..X..... 
    ......X. X....... .X...... .....X.. 
    ....X... ......X. ....X... .X...... 
    ..X..... ...X.... ......X. ......X. 
    .....X.. .....X.. ...X.... ....X... 
    
    Result: h = 8, w = 8, n = 8, sols = 92
    --------------------------------------------------------------------------------
    Testing: h = 9, w = 9, n = 9, sols = 352
    
    X........ X........ X........ X........ X........ X........ X........ X........ 
    ..X...... ..X...... ..X...... ...X..... ...X..... ...X..... ...X..... ...X..... 
    .....X... ......X.. .......X. .X....... .....X... .....X... ......X.. ......X.. 
    .......X. .X....... .....X... .......X. ..X...... .......X. ..X...... ........X 
    .X....... .......X. ........X .....X... ........X .X....... .......X. .X....... 
    ...X..... ....X.... .X....... ........X .X....... ....X.... .X....... ....X.... 
    ........X ........X ....X.... ..X...... .......X. ..X...... ....X.... .......X. 
    ......X.. ...X..... ......X.. ....X.... ....X.... ........X ........X .....X... 
    ....X.... .....X... ...X..... ......X.. ......X.. ......X.. .....X... ..X...... 
    
    X........ X........ X........ X........ X........ X........ X........ X........ 
    ...X..... ....X.... ....X.... ....X.... ....X.... ....X.... ....X.... .....X... 
    .......X. .X....... ......X.. ......X.. ......X.. ........X ........X .X....... 
    ..X...... .....X... .X....... ........X ........X .X....... .....X... ........X 
    ........X ........X .....X... ..X...... ...X..... .....X... ...X..... ......X.. 
    ......X.. ..X...... ..X...... .......X. .X....... .......X. .X....... ...X..... 
    ....X.... .......X. ........X .X....... .......X. ..X...... .......X. .......X. 
    .X....... ...X..... ...X..... ...X..... .....X... ......X.. ..X...... ..X...... 
    .....X... ......X.. .......X. .....X... ..X...... ...X..... ......X.. ....X.... 
    
    X........ X........ X........ X........ X........ X........ X........ X........ 
    .....X... .....X... .....X... .....X... .....X... ......X.. ......X.. ......X.. 
    ...X..... ...X..... .......X. .......X. ........X ...X..... ...X..... ...X..... 
    .X....... .X....... ..X...... ....X.... ....X.... .....X... .......X. .......X. 
    ......X.. .......X. ......X.. .X....... .X....... ........X ..X...... ..X...... 
    ........X ..X...... ...X..... ...X..... .......X. .X....... ....X.... ........X 
    ..X...... ........X .X....... ........X ..X...... ....X.... ........X .....X... 
    ....X.... ......X.. ........X ......X.. ......X.. ..X...... .X....... .X....... 
    .......X. ....X.... ....X.... ..X...... ...X..... .......X. .....X... ....X.... 
    
    X........ X........ X........ X........ .X....... .X....... .X....... .X....... 
    ......X.. .......X. .......X. .......X. ...X..... ...X..... ...X..... ...X..... 
    ....X.... ...X..... ....X.... ....X.... X........ ......X.. .......X. ........X 
    .......X. .X....... ..X...... ..X...... ......X.. X........ ..X...... ......X.. 
    .X....... ......X.. .....X... ........X ........X ..X...... ........X ..X...... 
    ........X ........X ........X ......X.. .....X... ........X .....X... X........ 
    ..X...... .....X... .X....... .X....... ..X...... .....X... X........ .....X... 
    .....X... ..X...... ...X..... ...X..... ....X.... .......X. ....X.... .......X. 
    ...X..... ....X.... ......X.. .....X... .......X. ....X.... ......X.. ....X.... 
    
    .X....... .X....... .X....... .X....... .X....... .X....... .X....... .X....... 
    ...X..... ....X.... ....X.... ....X.... ....X.... ....X.... ....X.... ....X.... 
    ........X ......X.. ......X.. ......X.. ......X.. .......X. .......X. .......X. 
    ......X.. X........ ...X..... ........X ........X X........ X........ .....X... 
    ....X.... ..X...... X........ ..X...... ...X..... ..X...... ........X ........X 
    ..X...... .......X. ..X...... .....X... .......X. .....X... .....X... ..X...... 
    X........ .....X... ........X ...X..... X........ ........X ..X...... X........ 
    .....X... ...X..... .....X... X........ ..X...... ......X.. ......X.. ...X..... 
    .......X. ........X .......X. .......X. .....X... ...X..... ...X..... ......X.. 
    
    .X....... .X....... .X....... .X....... .X....... .X....... .X....... .X....... 
    ....X.... ....X.... .....X... .....X... .....X... .....X... .....X... .....X... 
    .......X. ........X X........ X........ X........ X........ ..X...... ........X 
    .....X... ...X..... ..X...... ......X.. ......X.. ........X X........ ..X...... 
    ........X X........ ......X.. ...X..... ....X.... ....X.... .......X. ....X.... 
    ..X...... .......X. ........X .......X. ..X...... .......X. ...X..... .......X. 
    X........ .....X... ...X..... ..X...... ........X ...X..... ........X ...X..... 
    ......X.. ..X...... .......X. ....X.... ...X..... ......X.. ......X.. X........ 
    ...X..... ......X.. ....X.... ........X .......X. ..X...... ....X.... ......X.. 
    
    .X....... .X....... .X....... .X....... .X....... .X....... .X....... .X....... 
    ......X.. ......X.. ......X.. .......X. .......X. .......X. ........X ........X 
    ....X.... ....X.... ........X X........ ....X.... .....X... ....X.... .....X... 
    X........ .......X. .....X... ...X..... ..X...... ........X ..X...... ..X...... 
    ........X X........ ..X...... ......X.. ........X ..X...... .......X. ....X.... 
    ...X..... ...X..... X........ ........X .....X... X........ ...X..... .......X. 
    .....X... .....X... ...X..... .....X... ...X..... ...X..... ......X.. X........ 
    .......X. ..X...... .......X. ..X...... X........ ......X.. X........ ...X..... 
    ..X...... ........X ....X.... ....X.... ......X.. ....X.... .....X... ......X.. 
    
    .X....... .X....... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... 
    ........X ........X X........ X........ X........ X........ X........ X........ 
    .....X... .....X... ...X..... .....X... ......X.. ......X.. .......X. ........X 
    ..X...... ...X..... ......X.. .......X. .X....... ....X.... ...X..... ......X.. 
    ......X.. ......X.. ........X ....X.... .......X. .......X. ........X ....X.... 
    ...X..... X........ .X....... .X....... .....X... .X....... ......X.. .X....... 
    X........ ..X...... ....X.... ...X..... ...X..... ...X..... ....X.... .......X. 
    .......X. ....X.... .......X. ........X ........X .....X... .X....... .....X... 
    ....X.... .......X. .....X... ......X.. ....X.... ........X .....X... ...X..... 
    
    ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... 
    ....X.... ....X.... ....X.... ....X.... ....X.... ....X.... ....X.... .....X... 
    .X....... .X....... ......X.. .......X. .......X. ........X ........X .X....... 
    .......X. .......X. X........ .X....... .X....... .X....... ...X..... ......X.. 
    X........ X........ ...X..... ........X ........X ...X..... X........ X........ 
    ...X..... ......X.. .X....... .....X... ......X.. ......X.. ......X.. ...X..... 
    ......X.. ...X..... .......X. X........ X........ X........ .X....... .......X. 
    ........X .....X... .....X... ......X.. ...X..... .......X. .....X... ....X.... 
    .....X... ........X ........X ...X..... .....X... .....X... .......X. ........X 
    
    ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... 
    .....X... .....X... .....X... .....X... .....X... .....X... .....X... .....X... 
    .X....... .......X. .......X. .......X. .......X. .......X. ........X ........X 
    ........X X........ X........ .X....... ....X.... ....X.... X........ .X....... 
    ....X.... ...X..... ....X.... ...X..... X........ .X....... .......X. ....X.... 
    X........ ......X.. ........X ........X ........X ........X ...X..... ......X.. 
    .......X. ....X.... .X....... ......X.. ......X.. ......X.. .X....... ...X..... 
    ...X..... .X....... ...X..... ....X.... .X....... ...X..... ......X.. X........ 
    ......X.. ........X ......X.. X........ ...X..... X........ ....X.... .......X. 
    
    ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... 
    .....X... .....X... .....X... .....X... .....X... ......X.. ......X.. ......X.. 
    ........X ........X ........X ........X ........X .X....... .X....... .X....... 
    .X....... ....X.... ......X.. ......X.. ......X.. ...X..... .......X. .......X. 
    .......X. .......X. X........ .X....... ...X..... .......X. ....X.... .....X... 
    X........ X........ ...X..... ...X..... X........ X........ ........X ...X..... 
    ...X..... ...X..... .X....... .......X. .......X. ....X.... X........ X........ 
    ......X.. .X....... ....X.... X........ .X....... ........X .....X... ....X.... 
    ....X.... ......X.. .......X. ....X.... ....X.... .....X... ...X..... ........X 
    
    ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... 
    ......X.. ......X.. ......X.. ......X.. ......X.. .......X. .......X. .......X. 
    ...X..... ...X..... ...X..... ........X ........X .X....... ...X..... .....X... 
    .X....... .X....... .......X. X........ ...X..... ...X..... ......X.. X........ 
    ........X ........X ....X.... ....X.... .X....... ........X ........X ........X 
    ....X.... .....X... ........X .X....... ....X.... ......X.. .X....... .X....... 
    X........ X........ X........ .......X. .......X. ....X.... ....X.... ....X.... 
    .......X. ....X.... .....X... .....X... .....X... X........ X........ ......X.. 
    .....X... .......X. .X....... ...X..... X........ .....X... .....X... ...X..... 
    
    ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... ..X...... 
    .......X. .......X. ........X ........X ........X ........X ........X ........X 
    .....X... .....X... .X....... ...X..... ...X..... ...X..... .....X... .....X... 
    ...X..... ........X ....X.... X........ .X....... .......X. .X....... ...X..... 
    ........X .X....... .......X. .......X. .......X. ....X.... ....X.... X........ 
    X........ ....X.... X........ .....X... .....X... .X....... ......X.. ......X.. 
    ....X.... X........ ......X.. .X....... X........ .....X... X........ ....X.... 
    ......X.. ...X..... ...X..... ......X.. ......X.. X........ ...X..... .X....... 
    .X....... ......X.. .....X... ....X.... ....X.... ......X.. .......X. .......X. 
    
    ..X...... ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... 
    ........X X........ X........ X........ X........ X........ X........ .X....... 
    .....X... ..X...... ....X.... ....X.... ....X.... ......X.. ........X ....X.... 
    .......X. .....X... .X....... .......X. ........X ........X .....X... .......X. 
    .X....... ........X ........X .X....... .X....... .X....... ..X...... X........ 
    ...X..... .X....... ......X.. ......X.. .....X... .....X... ......X.. ..X...... 
    X........ .......X. ..X...... ..X...... .......X. .......X. .X....... .....X... 
    ......X.. ....X.... .......X. .....X... ..X...... ..X...... .......X. ........X 
    ....X.... ......X.. .....X... ........X ......X.. ....X.... ....X.... ......X.. 
    
    ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... 
    .X....... .X....... .X....... .X....... .X....... .X....... .....X... .....X... 
    ......X.. ......X.. ......X.. .......X. ........X ........X X........ X........ 
    ..X...... ........X ........X ..X...... ..X...... ....X.... ....X.... ........X 
    X........ X........ X........ ........X .....X... X........ .X....... ....X.... 
    .......X. ....X.... .......X. ......X.. .......X. .......X. .......X. .......X. 
    ....X.... .......X. ....X.... ....X.... X........ .....X... ..X...... .X....... 
    ........X .....X... ..X...... X........ ....X.... ..X...... ......X.. ......X.. 
    .....X... ..X...... .....X... .....X... ......X.. ......X.. ........X ..X...... 
    
    ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... ...X..... 
    .....X... .....X... .....X... .....X... .....X... .....X... .....X... .....X... 
    X........ ..X...... ..X...... ..X...... .......X. .......X. .......X. .......X. 
    ........X ........X ........X ........X .X....... .X....... .X....... ..X...... 
    ......X.. .X....... .X....... ......X.. ....X.... ....X.... ......X.. X........ 
    ..X...... ....X.... .......X. X........ X........ ......X.. X........ ......X.. 
    .......X. .......X. ....X.... .......X. ........X ........X ..X...... ....X.... 
    .X....... X........ ......X.. .X....... ......X.. X........ ....X.... .X....... 
    ....X.... ......X.. X........ ....X.... ..X...... ..X...... ........X ........X 
    
    ... to be continued ...
    

提交回复
热议问题