773.滑动谜题

在这里插入图片描述
在这里插入图片描述

class Solution:
    def slidingPuzzle(self, board):
        res = []
        board_res = [[1, 2, 3], [4, 5, 0]]
        ans = 0
        if board == board_res:
            return ans
        q = [board]
        new = [[-1, 0], [0, 1], [1, 0], [0, -1]]
        while q:
            size = len(q)
            ans = ans + 1
            while size:
                # 查找0的坐标
                for i in range(2):
                    for j in range(3):
                        if q[0][i][j] == 0:
                            zero_i = i
                            zero_j = j
                            break
                for new_x, new_y in new:
                    tmp = copy.deepcopy((q[0]))
                    if 0 <= zero_i + new_x <= 1 and 0 <= zero_j + new_y <= 2:
                        # 交换位置
                        tmp[zero_i][zero_j], tmp[zero_i + new_x][zero_j + new_y] = tmp[zero_i + new_x][zero_j + new_y], \
                                                                                tmp[zero_i][zero_j]
                        if tmp not in res:
                            res.append(tmp)
                            if tmp == board_res:
                                return ans
                            q.append(tmp)
                size = size - 1
                q.pop(0)
        return -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值