0
点赞
收藏
分享

微信扫一扫

845. 八数码

洲行 2022-03-11 阅读 75

Powered by:NEFU AB-IN

Link

文章目录

845. 八数码

  • 题意

  • 思路

    注意:

    • 通过字符串来记录每一次的状态
    • 这样获取某一个元素的二维坐标, n代表行数, m代表列数
      • x = id // n
      • y = id % m
  • 代码

    '''
    Author: NEFU AB-IN
    Date: 2022-03-02 16:49:23
    FilePath: \ACM\Acwing\845.py
    LastEditTime: 2022-03-02 17:20:48
    '''
    
    from collections import Counter, deque
    
    d = Counter()
    
    
    def bfs(start):
        q = deque()
        q.appendleft(start)
        end = '12345678x'
        while q:
            t = q.pop()
            if t == end:
                return d[t]
            dx = [-1, 0, 1, 0]
            dy = [0, 1, 0, -1]
    
            id = t.index('x')
            x, y = id // 3, id % 3
            for i in range(4):
                x1 = x + dx[i]
                y1 = y + dy[i]
                tmp = list(t)
                if x1 >= 0 and x1 < 3 and y1 >= 0 and y1 < 3:
                    tmp[id], tmp[x1 * 3 + y1] = tmp[x1 * 3 + y1], tmp[id]
                    tmp = "".join(tmp)
                    if not d[tmp]:
                        q.appendleft(tmp)
                        d[tmp] = d[t] + 1
        return -1
    
    
    start = "".join(input().split())
    print(bfs(start))
    
举报

相关推荐

0 条评论