解题思路:
    同1878题。


注意事项:
    此题不能用二维数组表示状态(注释部分),会超时。

参考代码:

def bfs():
    global start, end, cache_state
    stack = [start]
    while stack:
        state = stack.pop(0)
        for direction in around:
            i, j = divmod(state.index('.'), 3)
            if 0 <= i + direction[0] < 3 and 0 <= j + direction[1] < 3:
                # temp = [list(state[3 * k:3 * k + 3]) for k in range(3)]
                # temp[i][j], temp[i + direction[0]][j + direction[1]] = temp[i + direction[0]][j + direction[1]], temp[i][j]
                # temp = ''.join(element for row in temp for element in row)
                temp = list(state)
                idx_0, idx_1 = 3 * i + j, 3 * (i + direction[0]) + j + direction[1]
                temp[idx_0], temp[idx_1] = temp[idx_1], temp[idx_0]
                temp = ''.join(temp)
                if temp not in cache_state:
                    cache_state.setdefault(temp, cache_state[state] + 1)
                    stack.append(temp)
                    if temp == end:
                        return cache_state[end]

                        
start, end = [input().strip() for _ in range(2)]
cache_state, around = {start: 0}, [[-1, 0], [0, -1], [1, 0], [0, 1]]
print(bfs())


点赞(0)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

牛奶加咖啡 3年前 回复TA
牛比,我看湿了