繁体   English   中英

Python递归骑士之旅

[英]Python Recursive Knight Tour

我正在尝试使用python中的递归回溯方法来解决骑士之旅算法。

解决方案应该是一个包含24个记录的步骤的矩阵,但是最多只能计算5个步骤。 它不会输入递归if语句。

JUMP_POS = [ (2,1),
             (2,-1),
             (1,2),
             (1,-2),
             (-1,2),
             (-1,-2),
             (-2,1),
             (-2,-1)
           ]

def springen(x, y, nr, matrix):
    matrix_len = len(matrix)
    matrix[x][y] = nr
    if nr == ( (matrix_len*matrix_len) -1 ):
        print("good", matrix)
        return True
    else:
        for pos in JUMP_POS:
            xNeu = x + pos[0]
            yNeu = x + pos[1]

            if xNeu >= 0 and xNeu < matrix_len and yNeu >= 0 and yNeu < matrix_len:
                if matrix[xNeu][yNeu] == 0: #check, if position is empty
                    if springen(xNeu, yNeu, nr+1, matrix):
                        #this section is not passing
                        return True

        matrix[x][y] = 0
        return False

matrix = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
print(springen(0,0,0,matrix))

我看到的问题是,当您可能表示yNeu = y + pos[1]时,设置了yNeu = x + pos[1] yNeu = y + pos[1]

另一个潜在的问题是,由于第一步同时使用0来标记未访问的正方形,因此以后可以重新访问起始正方形,因此请考虑使用-1None来标记未访问的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM