我不能使用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是最大递归深度。