class Solution:
def slidingPuzzle(self, board: List[List[int]]) -> int:
# 记录每一个数字的相邻数字的索引
neighbor = [
[1,3],
[0,4,2],
[1,5],
[0,4],
[3,1,5],
[4,2]
]
# 压缩成一维字符串
start = "".join([str(board[i][j]) for i in range(2) for j in range(3)])
target = "123450"
visited = set()
step = 0
queue = collections.deque()
queue.append(start)
visited.add(start)
while queue:
size = len(queue)
for i in range(size):
cur = queue.popleft()
if cur == target:
return step
id_zero = cur.index('0')
for adj in neighbor[id_zero]:
cur_string = cur
temp = cur_string[adj]
cur_string = cur_string[:adj]+ '0' + cur_string[adj+1:]
cur_string = cur_string[:id_zero] + temp + cur_string[id_zero+1:]
if cur_string not in visited:
queue.append(cur_string)
visited.add(cur_string)
step+=1
return -1
08-25
155
06-26
82
09-26
1069