AcWing 845. 八数码-python(超时)
原题链接
中等
作者:
Actor丶
,
2020-02-15 22:01:20
,
所有人可见
,
阅读 758
"""
基本思想:
bfs模板:
1. 初始化队列
2. while queue不为空
3. 队顶元素出队
4. 遍历,满足条件的入队
"""
def bfs(start : list):
d = {}
d["".join(start)] = 0
end = "12345678x"
queue = [start.copy()]
dx = [-1,0,1,0]
dy = [0,-1,0,1]
while queue:
t = queue.pop(0)
keyStrBefore = "".join(t)
if keyStrBefore==end: return d[keyStrBefore]
distance = d[keyStrBefore]
k = t.index("x")
x = k//3
y = k%3
for i in range(4):
a = x+dx[i]
b = y+dy[i]
if a>=0 and a<3 and b>=0 and b<3:
t[k], t[a*3+b] = t[a*3+b], t[k]
keyStrAfter = "".join(t)
if keyStrAfter not in d:
queue.append(t.copy())
d[keyStrAfter] = distance + 1
t[k], t[a*3+b] = t[a*3+b], t[k]
start = ["0" for i in range(9)]
in_li = input().split()
for i in range(9):
start[i] = in_li[i]
res = bfs(start)
if not res:
print(-1)
else:
print(res)
用deque代替pop(0),就可以AC了。
好的,我试试。谢谢
哈哈我也是超时啊!还是不能这么暴力啊hh~
这个图床放的行
什么意思?欢迎指正!
…原是要评论上一个分享的 页面刷新,评论到大佬这条了,溜了溜了