脚本宝典收集整理的这篇文章主要介绍了最短的华容道程序,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
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,请注明来意。