PythonKnight的Tour特别节目

问题描述 投票:0回答:0

我想制作一个程序,我可以输入A:

    板板尺寸(W和H)
  • the骑士可以采取的智能行动数以达到任何正方形
  • 骑士的起始位置
  • 我想要这种格式:
  • size:10 动作:2 骑士:2,4

2。 。 1 2 1。 。 2.

。 2 1 2。 2 1 2。 .

2。 2。 0。 2。 2.

。 2 1 2。 2 1 2。 .

2。 。 1 2 1。 。 2.

。 2。 2。 2。 2。 .

。 。 2。 2。 2。 。 .

。 。 。 。 。 。 。 。 。 .

。 。 。 。 。 。 。 。 。 .

。 。 。 。 。 。 。 。 。 .

上面的数字是进入该地区的移动次数。 我的问题是,我不知道如何在板上写下相应的数字,以了解每个正方形进行多少移动,并且在将其限制为特定值时遇到困难,以便该程序即使到达后也不会继续寻找正方形指定的限制

以下代码现在使用'x'代替数字和'。代替骑士的位置。 0是“”。用于指示空位。 我的代码是我的代码:

chess_board = [] size = 10 for i in range(size): row = [] for j in range(size): row.append(0) chess_board.append(row) def print_board(): for i in range(size): for j in range(size): print(chess_board[i][j], end=" ") print("\n") def get_possibilities(x, y): pos_x = (2, 1, 2, 1, -2, -1, -2, -1) pos_y = (1, 2, -1, -2, 1, 2, -1, -2) possibilities = [] for i in range(len(pos_x)): if x+pos_x[i] >= 0 and x+pos_x[i] <= (size-1) and y+pos_y[i] >= 0 and y+pos_y[i] <= (size-1) and chess_board[x+pos_x[i]][y+pos_y[i]] == 0: possibilities.append([x+pos_x[i], y+pos_y[i]]) return possibilities def solve(): counter = 2 x = 2 y = 4 chess_board[x][y] = '.' for i in range((size*2)-1): pos = get_possibilities(x, y) minimum = pos[0] for p in pos: if len(get_possibilities(p[0], p[1])) <= len(get_possibilities(minimum[0], minimum[1])): minimum = p x = minimum[0] y = minimum[1] chess_board[x][y] = 'x' counter += 1 solve() print_board()

我设法得到答案:

possible_x = [1, 1, -1, -1, 2, 2, -2, -2] possible_y = [2, -2, 2, -2, 1, -1, 1, -1] board = [] def makeBoard(size, board): for row in range(size): row_list = [] for column in range(size): row_list.append(". ") board.append(row_list) return board def limit(size, x, y): if(x >= 0 and x < size and y >= 0 and y < size): return True else: return False board = [] def moveKnight(size, x, y, check, limit_max, start_x, start_y): for index in range(len(possible_x)): if check >= limit_max: break nextX = possible_x[index] + x nextY = possible_y[index] + y if limit(size, nextX, nextY): if '.' in board[nextX][nextY] or int(board[nextX][nextY].rstrip()) > check+1: board[nextX][nextY] = str(check+1)+' ' moveKnight(size, nextX, nextY, check+1, limit_max, start_x, start_y) board[start_x][start_y] = '0 ' size = int(input("Size: ")) moves = int(input("Moves: ")) knight_posX, knight_posY = input("Knight: ").split(",") board = makeBoard(size, board) moveKnight(size, int(knight_posX), int(knight_posY), 0, moves, int(knight_posX), int(knight_posY)) print('\n'.join([''.join(row).rstrip() for row in board]))

	
python knights-tour
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.