Python数据结构与算法(poj):P01077——Eight

这篇文章介绍了如何使用深度优先搜索(BFS)解决OpenJudge中的一个题目,通过遍历数字迷宫并处理重复路径来找出从起点到终点的最优操作序列。
摘要由CSDN通过智能技术生成

OpenJudge - 01077:Eight

        本来以为很复杂……其实挺简单的,使用bfs,同时注意判重就可以。我多开一个字典,结果就MLE了。。。

        主要的思路就是从最开始的12345678x得到所有的符合要求情况,然后判断即可。

from collections import deque
from itertools import permutations
perms = (''.join(perm) for perm in permutations('012345678'))
judge = {perm: None for perm in perms}
dir = [(-1, 0), (1, 0), (0, -1), (0, 1)]
op = ['d', 'u', 'r', 'l']
queue = deque()
queue.append([2, 2, '', '123456780'])
judge['123456780'] = True
while queue:
    x, y, now, status = queue.popleft()
    for k in range(4):
        nx = x+dir[k][0]
        ny = y+dir[k][1]
        if 0 <= nx < 3 and 0 <= ny < 3:
            a, b = 3*x + y, 3*nx + ny
            p, q = status[a], status[b]
            if a < b:
                new_status = status[:a] + q + status[a+1:b] + p + status[b+1:]
            else:
                new_status = status[:b] + p + status[b+1:a] + q + status[a+1:]
            if judge[new_status] is not None:
                continue
            judge[new_status] = op[k]+now
            queue.append([nx, ny, op[k]+now, new_status])
check = ''.join(input().split()).replace('x', '0')
if judge[check] is not None:
    print(judge[check])
else:
    print('unsolvable')

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值