如何用递归函数和这个特定函数解决这个平铺游戏? (没有numpy)

时间:2019-06-21 15:58:17

标签: python-3.x

我不能使用numpy,它具有以下两个功能:

x1 =[['1','2','3'],
     ['4','5','6'],
     ['7','8','0']]

x2 =[['1','2','3'],
     ['4','5','6'],
     ['0','7','8']]

我必须使用此功能:

tiles(x1, x2, depth, maxdepth, position, lastmove, movelist)

我需要将此函数与递归配合使用,以获取等于x1到x2的最小移动列表,同时仅将图块移动到“ 0”附近。

这是我的完整代码,结果不好:

def find0(matrix):
    for i in range(len(matrix)):
        for j in range(len(matrix[i])):
            if matriz[i][j] == '0':
                x = i
                y = j
    return x, y


def move(mov, matrix,xzero,yzero):
    if mov == 'd':
        matrix[xzero][yzero], matrix[xzero][yzero+1] = matrix[xzero][yzero+1], matrix[xzero][yzero]
    if mov == 'e':
        matrix[xzero][yzero], matrix[xzero][yzero-1] = matrix[xzero][yzero-1], matrix[xzero][yzero]
    if mov == 'c':
        matrix[xzero][yzero], matrix[xzero-1][yzero] = matrix[xzero-1][yzero], matrix[xzero][yzero]
    if mov == 'b':
        matrix[xzero][yzero], matrix[xzero+1][yzero] = matrix[xzero+1][yzero], matrix[xzero][yzero]


def isequal(x1, x2):
    flag = 0
    for n in range(0,len(x1)):
            for n1 in range(0,len(x1[n])):
                if x1[n][n1] != x2[n][n1]:
                    flag = 1

    return flag == 0



x1 = [['1','2','3'],
      ['4','5','6'],
      ['7','8','0']]

x2 = [['1','2','3'],
      ['4','5','6'],
      ['0','7','8']]

depth = 1
maxdepth = 5
position = find0(x1)
lastmove = ''
movelist = []

def tiles(x1, x2, depth, maxdepth, position, lastmove, movelist):
    pos = find0(x1)
    n = len(x1)-1
    pmov = 0

    if position[0] != 0 and lastmove != 'b':
        pmov+=1
    if position[1] != n and lastmove != 'e':
        pmov+=1
    if position[0] != n and lastmove != 'c':
        pmov+=1
    if position[1] != 0 and lastmove != 'd':
        pmov+=1




    for i in range(pmov):
        #Move up
        if position[0] != 0 and lastmove != 'b':
            move('c', x1, position[0], position[1])
            position = find0(x1)
            lastmove = 'c'
            print(lastmove)
            for i in x1:
                print(i)

        #Move right
        elif position[1] != n and lastmove != 'e':
            move('d', x1, position[0], position[1])
            position = find0(x1)
            lastmove = 'd'
            print(lastmove)
            for i in x1:
                print(i)

        #Move down
        elif position[0] != n and lastmove != 'c':
            move('b', x1, position[0], position[1])
            position = find0(x1)
            lastmove = 'b'
            print(lastmove)
            for i in x1:
                print(i)

        #Move left
        elif position[1] != 0 and lastmove != 'd':
            move('e', x1, position[0], position[1])
            position = find0(x1)
            lastmove = 'e'
            print(lastmove)
            for i in x1:
                print(i)








tiles(x1, x2, depth, maxdepth, position, lastmove, movelist)

移动列表需要存储最佳移动列表,以实现x1和x2之间的相等,其中maxdepth是最大递归深度。

0 个答案:

没有答案