原题链接:蓝桥杯历届试题-九宫重排
解题思路:根据大佬改编的
注意事项:
参考代码:
def check(x,y): return x<3 and x>=0 and y<3 and y>=0 def toMatrix(strn): global m m=[[None]*3 for i in range(3)] for i in range(len(strn)): m[i//3][i%3]=strn[i] def tostring(): global m l='' for i in range(3): for j in range(3): l+=m[i][j] return l def dbfs(): global m dira=[[0, 1],[0, -1],[1, 0],[-1, 0]] q1=[] q2=[] dis={} vis={} q1.append(first) dis[first]=1 vis[first]=1 q2.append(last) dis[last]=1 vis[last]=2 while len(q1)>0 and len(q2)>0: if len(q1)<len(q2): str1=q1.pop(0) flag=1 else: str1=q2.pop(0) flag=2 toMatrix(str1) for i in range(3): for j in range(3): if m[i][j]=='.': x=i y=j for i in range(4): tx=x+dira[i][0] ty=y+dira[i][1] if check(tx,ty): m[x][y],m[tx][ty]=m[tx][ty],m[x][y] str2=tostring() if not str2 in dis.keys(): dis[str2]=dis[str1]+1 vis[str2]=vis[str1] if flag==1: q1.append(str2) elif flag==2: q2.append(str2) else: if vis[str1]+vis[str2]==3: ans=dis[str1]+dis[str2]-1 return ans m[x][y],m[tx][ty]=m[tx][ty],m[x][y] return -1 first=input().strip() last=input().strip() if last==first: print('0') else: print(dbfs())
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复