鲁班锁攻略10
1、这两年,随着大家对于孩子的教育开始重视起来,智力玩具现在是家长的首选,很多家长在没有足够的时间陪孩子的情况下,往往会会买一些玩具给孩子,让他们自已去玩,当然市面上流行的玩具比较多,想要选择一款比较好的玩具,能够对开发小孩的智力玩具肯定会受到家长们的喜欢了,不过,目前市场种类繁多,每款玩具都有各自的特点,消费者也不知道哪些比较适合自已的小孩,不如试试鲁班锁,当然,这种玩具玩法比较复杂,今天就给大家介绍一下鲁班锁解法。一、拆解动作限定:。
2、一般地,鲁班锁通过手工的“装配”难于“拆解”,相反,在计算机分析中,则“拆解”比“装配”更复杂些。这是因为在计算机程序中,“装配”是逻辑的,但“拆解”的逻辑过程却最终需要落实物理实现。对一个“逻辑装配”而成的锁,须由计算机程序对其尝试拆解,如果能够成功找到一个完全拆解方案,则该方案就是一个“解”,如果仅能完成部分拆解,也就是剩下的“块组”无法再继续拆解,那就称这个拆解方案为“部分解”。并非所有能“逻辑装配”的锁都能顺利拆解。
3、计算机程序对拆解动作有一定限制:拆解一个块时,块只允许沿三个互相垂直的方向之一移动,每次移动的距离必须是小立方边长的整数倍。也就是说,不允许朝任意方向移动块,也不允许移动任意距离。但是,移动时,可以是一块移动,也可以几个块组成一个整体移动。二、拆解程序的总体思路:。
4、程序对锁的拆解过程,就是不断地对块沿各个方向尝试移动的过程,对每一步移动,程序需判断:能否移动是否有块或块组分离。是否形成部分解。程序还得记录跟踪每一步操作后锁的状态,并需穷举全部拆解步骤,才能获取该装配的解的全部情况。
5、为了使程序能够进行相关操作,需把一个装配锁置于一个三维空间中,并对空间中的块进行定位。但这样做并不够,因为块的形状千变万化,跟踪一整个块还无法判断块之间在移动时的交互情况,因而需对块进行逻辑分解。
鲁班锁攻略10
1、一个长度为6单元的块,按“小立方”为单位,分解成24个区域,包括可切割加工的12个区域和二端固定的12个区域。程序需追踪这24个立方区域中全体物理存在的“小立方块”,当然“空立方”区域就不必计算了,全体物理小立方块在某个方向上可以移动的值的最小值,就是块在此方向上的可移动距离。下图画出一个块在三维空间中的情形:。绘制了一个以20单位边长的立方空间,以图中块的左下角处的“小立方”为例,其空间坐标为(,)=(6,6。
2、当一个装配锁定位到该栅格空间中后,所有小立方将被一一定位,获得唯一的空间坐标。对应于计算机程序,则设计一个三维数组(,),数组元素的值表示该栅格由哪个块占据,显见,其取值范围为1-6;对于纯空间(包括整个锁未占据的空间和“有孔锁”内部的孔洞),其数组元素的值为0。
3、按上述栅格空间的构造,一个块如果在栅格中移动,就相当于数组中对应元素值的改变。比如1#块的某个“小立方”(5,6,4)=1,即方向上的第5个栅格、方向上的第6栅格、方向上的第4栅格,如果此块向正方向移动一单元,那么就有(6,6,4)=1;拆解锁时,每移动一步,锁上各块的相互位置就发生变化。需用一个“状态”来表述这种不同的布局。
4、在计算机程序里,状态用每个块在每个方向上跟起始状态对比已经移动的数量来表示。如果把1#块确定为固定位置,那么每个状态就是通过另外剩下的5个块相对于1#块的偏移量来描述,通常就是15个整数。
5、程序需维持一个“状态”列表,以追踪运行情况。建立了以上相关数据结构后,整个拆解程序就可以化简为:分析在单个方向上的移动,以及判断这个移动是否使锁从一个状态到达另一个状态。