python 九宫重排_[蓝桥杯][历届试题]九宫重排 (Python代码)(bfs+集合)
ac代码..可是官网还有两组没过..
```python
from collections import deque
class Node():
def __init__(self, arr, step, point):
self.arr = arr
self.step = step
self.point = point
def up(moveNode):
new_arr = Node(moveNode.arr, moveNode.step, moveNode.point)
new_arr.arr = list(new_arr.arr)
new_arr.arr[new_arr.point], new_arr.arr[new_arr.point - 3] = new_arr.arr[new_arr.point - 3], new_arr.arr[
new_arr.point]
new_arr.arr = ''.join(new_arr.arr)
new_arr.point -= 3
new_arr.step += 1
return new_arr
def down(moveNode):
new_arr = Node(moveNode.arr, moveNode.step, moveNode.point)
new_arr.arr = list(new_arr.arr)
new_arr.arr[new_arr.point], new_arr.arr[new_arr.point + 3] = new_arr.arr[new_arr.point + 3], new_arr.arr[
new_arr.point]
new_arr.arr = ''.join(new_arr.arr)
new_arr.point += 3
new_arr.step += 1
return new_arr
def left(moveNode):
new_arr = Node(moveNode.arr, moveNode.step, moveNode.point)
new_arr.arr = list(new_arr.arr)
new_arr.arr[new_arr.point], new_arr.arr[new_arr.point - 1] = new_arr.arr[new_arr.point - 1], new_arr.arr[
new_arr.point]
new_arr.arr = ''.join(new_arr.arr)
new_arr.point -= 1
new_arr.step += 1
return new_arr
def right(moveNode):
new_arr = Node(moveNode.arr, moveNode.step, moveNode.point)
new_arr.arr = list(new_arr.arr)
new_arr.arr[new_arr.point], new_arr.arr[new_arr.point + 1] = new_arr.arr[new_arr.point + 1], new_arr.arr[
new_arr.point]
new_arr.arr = ''.join(new_arr.arr)
new_arr.point += 1
new_arr.step += 1
return new_arr
def check(node):
if node == end:
return True
else:
return False
start = input()
end = input()
for i in range(9):
if start[i] == ".":
point = i
break
node = Node(start, 0, point)
visited = set()
queue = deque()
queue.append(node)
while queue:
moveNode = queue.popleft()
moveStr = moveNode.arr
if moveStr not in visited:
visited.add(moveStr)
point = moveNode.point
if check(moveNode.arr):
print(moveNode.step)
break
if moveNode.point > 2:
queue.append(up(moveNode))
if moveNode.point < 6:
queue.append(down(moveNode))
if moveNode.point != 0 and moveNode.point != 3 and moveNode.point != 6:
queue.append(left(moveNode))
if moveNode.point != 2 and moveNode.point != 5 and moveNode.point != 8:
queue.append(right(moveNode))
```
0.0分
1 人评分
python 九宫重排_[蓝桥杯][历届试题]九宫重排 (Python代码)(bfs+集合)相关推荐
- 历届试题+九宫重排+java_蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)...
Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
- 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
- 蓝桥杯 历届试题 九宫重排
问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...
- [蓝桥杯][历届试题]九宫重排-双向bfs和map标记
题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...
- 蓝桥杯 历届试题 九宫重排
问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...
- 蓝桥杯历届试题-九宫重排
题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为: ...
- 算法练习/最小公倍数_蓝桥杯历届试题 核桃的数量
这道题乍一看没反应过来,点了提示发现就是求三个数的最小共倍数,估计这是某一年蓝桥杯代码题的第一题. 最小公倍数的求法是:a和b的最小公倍数=a*b/a和b的最大共约数 所以变成了求最大公约数了,应用& ...
- java九宫排序,蓝桥杯 历届试题 九宫重排 java
list = new ArrayList(); list.add(new Move(x1,y1,0,start));//添加初始状态进入list set.add(start);//添加初始字符串进入s ...
- 蓝桥杯 历届试题 九宫幻方
问题描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方 ...
最新文章
- 初中物理凸透镜成像动态图_初中物理:凸透镜成像、望远镜与显微镜的区别
- python调用自己写的函数_python调用自定义函数的实例操作
- Flask-----轻量级的框架,快速的搭建程序
- 启用MySQL的log-slow-queries(慢查询记录)
- JAVA校园二手交易平台
- IOS APP Store下载链接
- mkdir 创建目录命令
- ARM Cortex-M3/M4内核相关
- php 英文小写变大写,PHP_PHP英文字母大小写转换函数小结,每个单词的首字母转换为大写 - phpStudy...
- numpy多维数组获取指定矩形区域
- 框架—— Serverlet
- 华硕主板无盘启动bios设置_【华硕主板bios启动顺序】华硕主板bois启动项_华硕主板bios硬盘启动...
- 绝对值不等式的常见形式及解法
- Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)
- 游戏开发存档版本号的妙用
- Node.js背后的V8引擎优化技术
- 算法学习 (门徒计划)3-2 哈希表与布隆过滤器及经典问题 学习笔记
- 微信小程序-模仿绘制聊天界面
- RKMPP库快速上手--(四)MPP编码入门
- 死神境界账号服务器,死神境界1.2.0正式版 附攻略/隐藏密码