import sys def view(matrix): for x in range(0, 8): for y in range(0, 8): print("{0:2d}".format(matrix[x][y]), end=" ") print() return 0 def move(matrix, count, pos_x, pos_y): "次の一手を探す関数" for x in range(0,8): for y in range(0, 8): # 既に訪れたマスであれば次へ if matrix[x][y] > 0: continue # 動けるマスであれば、そこに動く if (abs(x - pos_x) == 1 and abs(y - pos_y) == 2) or (abs(x - pos_x) == 2 and abs(y - pos_y) == 1): matrix[x][y] = count # これが 64 手目であれば、チェス盤を全て埋めたので終了 if count == 64: view(matrix) sys.exit(0) move(matrix, count + 1, x, y) # 上の move() がチェス盤を埋め尽くして終了 (sys.exit(0)) した場合は、ここより下は実行されない # 今の手を取り消して、続きを検索する matrix[x][y] = 0 continue return -1 # square: 既に訪れたマスなら 1 以上, 未だ訪れていないマスなら 0 square = [[0 for i in range(0,8)] for j in range(0,8)] # 適切な初期座標が与えられていなければエラーメッセージを表示して終了 if len(sys.argv) != 3: print ("Usage: python {0:s} initial_x initial_y".format(sys.argv[0])) sys.exit(1) initial_x = int(sys.argv[1]) initial_y = int(sys.argv[2]) if initial_x < 0 or initial_x >= 8: print ("Error: initial_x must be between 0 and 7.") sys.exit(1) if initial_y < 0 or initial_y >= 8: print ("Error: initial_y must be between 0 and 7.") sys.exit(1) print ("The initial location is ({0:d}, {1:d}).".format (initial_x, initial_y)) square[initial_x][initial_y] = 1 move(square, 2, initial_x, initial_y)