题目描述:
输入
输入第一行包含九宫的初态,第二行包含九宫的终态。
输出
输出最少的步数,如果不存在方案,则输出-1。
样例输入
12345678. 123.46758
样例输出
3
思路:
采用广度优先遍历的方法,使用一个列表,放置九宫的状态。从表头取出一个状态,然后用四个方向遍历,寻找九宫一步就可以到达的下一个状态,放到该列表中。就这样当列表不为0时一直循环。
代码:
def guangduyouxian():
global zidian,start,end
l=[start]
while l:
state=l.pop(0)
xuhao=state.index('.')
i,j=divmod(xuhao,3)
for direction in around:
if 0<=i+direction[0]<3 and 0<=j+direction[1]<3:
temp=list(state)
mm,nn=i*3+j,(i+direction[0])*3+j+direction[1]
t=temp[mm]
temp[mm]=temp[nn]
temp[nn]=t
temp=''.join(temp)
if temp not in zidian:
zidian.setdefault(temp,zidian[state]+1)
l.append(temp)
if temp==end:
return zidian[temp]
start,end=[input().strip() for i in range(2)]
zidian={start:0}
around=[[-1,0],[0,-1],[1,0],[0,1]]
print(guangduyouxian())