请参阅链接。
(Python)#alst()、swap()、moves()用于其他滑动拼图问题
定义互换(p、z、nz):
lp=列表(p)
lp[z],lp[nz]=lp[nzz],“-”
return“”.join(lp)
def moves(p,shape):n x m滑动拼图的移动次数
nxt,(n,m),z=[],形状,p.find(“-”)#z:空白位置
如果z>n-1:nxt.append(swap(p,z,z-n))#清空
如果z<n*m-n:nxt.append(swap(p,z,z+n))#空
如果z%n!=0:nxt.append(交换(p,z,z-1))#左侧空白
如果z%n!=n-1:nxt.append(swap(p,z,z+1))#右侧空白
返回nxt
def alst(开始,形状,v=False,maxd=float('inf')):
alst,d,展开,前沿=[],0,set(),{start}
alst.append(len(前沿))
如果v:print(len(frontier),end=“,”)
当len(frontier)>0且d<maxd时:
reach1=设置(如果m未展开,则m在移动(p,形状)中的边界中的p为m)
expanded|=fronter#expanded=frontor#ALTERNATE使用更少内存
如果len(reach1):
附加(长度(reach1))
如果v:print(len(reach1),end=“,”)
前沿=到达1
d+=1
返回alst
打印(alst(“-12345678”,(3,3))#迈克尔·布拉尼基2020年12月28日
|