最短的华容道程序

发布时间:2022-06-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了最短的华容道程序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
 1 # -*- coding: gbk -*-
 2 From functools import reduce
 3 from copy import deepcopy
 4 def get_list(n, v): return list(map(lambda _:deepcopy(v), range(n)))
 5 E = '  '
 6 class brd:
 7     def __str__(m): return reduce(lambda x,y:str(x)+'n'+str(y), m.b, '')
 8     def put(m, blks):
 9         m.b = get_list(5, get_list(4, E))
10         for b in blks:
11             if b.x < 0 or b.x + b.w > 4 or b.y < 0 or b.y + b.h > 5: return False
12             for y in range(b.y, b.y + b.h):
13                 for x in range(b.x, b.x + b.w):
14                     if m.b[y][x] != E: return False
15                     m.b[y][x] = b.name
16         return True
17 class Blk:
18     def __inIT__(m, name, x, y, w = 1, h = 1): m.name = name; m.x = x; m.y = y; m.w = w; m.h = h; m.old = []
19     def step(m, dx, dy): m.old.apPEnd((m.x, m.y)); m.x += dx; m.y += dy
20     def back(m): (m.x, m.y) = m.old.pop()
21 brd = Brd()
22 blks = [
23     Blk('', 1, 0, 2, 2), # 调试期间可注释掉下面一些块
24     Blk('', 0, 0, 1, 2),
25     Blk('', 3, 0, 1, 2),
26     Blk('', 0, 2, 1, 2),
27     Blk('', 1, 2, 2, 1),
28     Blk('', 3, 2, 1, 2),
29     Blk('', 1, 3), Blk('', 2, 3), Blk('', 0, 4), Blk('', 3, 4)]
30 cc = blks[0]; brd.put(blks); PRint(brd)
31 input('Press the Enter key to continue')
32 seen = {}; path = []
33 def seArch(n):
34     if cc.y == 3:
35         for p in path: print(p)
36         return True
37     s = str(brd)
38     if seen.get(s, False): return False
39     seen[s] = True
40     for (dx, dy) in [[-1,0],[1,0],[0,-1],[0,1]]:
41         for b in blks:
42             b.step(dx, dy)
43             if brd.put(blks):
44                 path.append(str(brd))
45                 if search(n + 1): return True
46                 path.pop()
47             b.back()
48     return False
49 search(0)
50 # 踩过的坑: 1. deepcopy; 2. blk.old没搞成堆栈; 3. seen放错地方

华容道与魔方、独立钻石棋一起被称为“智力游戏界的三个不可思议”。它与七巧板、九连环等中国传统益智玩具还有个代名词叫“中国的难题”。

移动各个棋子使曹操从初始位置移到棋盘最下方逃走。曹操逃出华容道的最大障碍是关羽。

姜长英说“估计它的历史只不过有几十年。从前人的笔记中没有发现有玩具华容道的记载。” 他自己在1943年夏第一次看到这个玩具。林德说他在1938年在陕西省城固县的乡下见过小孩玩用纸片做的华容道。

20世纪50年代,许莼舫详细分析了华容道游戏,给出了100步的解法,总结出8条规则,4个要点:1. 四个小兵必须两两在一起,不要分开;2. 曹操、关羽、大将移动时前面应有两个小兵开路;3. 曹操移动时后面应有两个小兵追赶;4. 以上三种状况,其中各块都可局部任意移动。

经姜长英、许莼舫、藤村幸三郎、清水达雄、马丁·加达纳, Thomas B. Lenann等的努力,游戏解法已减少至81步。计算机使用穷举法也是81步。

脚本宝典总结

以上是脚本宝典为你收集整理的最短的华容道程序全部内容,希望文章能够帮你解决最短的华容道程序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。