当前位置:柔美女性网 >

绿色生活 >心理 >

鲁班锁八通解法

鲁班锁八通解法

鲁班锁八通解法

1,首先了解鲁班锁结构:8根孔明锁其中4根两两构成X形,另外两根从X形中间穿过。

2、看懂鲁班锁每一根的结构,看在8根孔明锁中哪四根拼成的X最宽,整理思路,进行其余两根的孔明锁,进行解锁。

3、在解锁孔明锁时,要先解开一半。目的是为了留出先插入其中的两根锁,然后一次解下即可。

4、鲁班锁,起源于古代中国建筑的榫卯结构, 这种三维的拼插器具内部的凹凸部分(即榫卯结构)啮合,十分巧妙。原创为木质结构,外观看是严丝合缝的十字立方体。 鲁班锁类玩具比较多,形状和内部的构造各不相同,一般都是易拆难装。

鲁班锁八通解法

一、拆解动作限定:

一般地,鲁班锁通过手工的“装配”难于“拆解”,相反,在计算机分析中,则“拆解”比“装配”更复杂些。这是因为在计算机程序中,“装配”是逻辑的,但“拆解”的逻辑过程却最终需要落实物理实现。

对一个“逻辑装配”而成的锁,须由计算机程序对其尝试拆解,如果能够成功找到一个完全拆解方案,则该方案就是一个“解”,如果仅能完成部分拆解,也就是剩下的“块组”无法再继续拆解,那就称这个拆解方案为“部分解”。并非所有能“逻辑装配”的锁都能顺利拆解。

计算机程序对拆解动作有一定限制:拆解一个块时,块只允许沿三个互相垂直的方向之一移动,每次移动的距离必须是小立方边长的整数倍。也就是说,不允许朝任意方向移动块,也不允许移动任意距离。但是,移动时,可以是一块移动,也可以几个块组成一个整体移动。

二、拆解程序的总体思路:

程序对锁的拆解过程,就是不断地对块沿各个方向尝试移动的过程,对每一步移动,程序需判断:能否移动?移动几格?是否有块或块组分离?是否形成部分解?程序还得记录跟踪每一步操作后锁的状态,并需穷举全部拆解步骤,才能获取该装配的解的全部情况。

为了使程序能够进行相关操作,需把一个装配锁置于一个三维空间中,并对空间中的块进行定位。但这样做并不够,因为块的形状千变万化,跟踪一整个块还无法判断块之间在移动时的交互情况,因而需对块进行逻辑分解。一个长度为6单元的块,按“小立方”为单位,分解成24个区域,包括可切割加工的12个区域和二端固定的12个区域。程序需追踪这24个立方区域中全体物理存在的“小立方块”,当然“空立方”区域就不必计算了,全体物理小立方块在某个方向上可以移动的值的最小值,就是块在此方向上的可移动距离。下图画出一个块在三维空间中的情形:

绘制了一个以20单位边长的立方空间,以图中块的左下角处的“小立方”为例,其空间坐标为(X,Y,Z)=(6,6,10)。

当一个装配锁定位到该栅格空间中后,所有小立方将被一一定位,获得唯一的空间坐标。对应于计算机程序,则设计一个三维数组GRID(x,y,z),数组元素的值表示该栅格由哪个块占据,显见,其取值范围为1-6对于纯空间(包括整个锁未占据的空间和“有孔锁”内部的孔洞),其数组元素的值为0。

按上述栅格空间的构造,一个块如果在栅格中移动,就相当于数组中对应元素值的改变。比如1#块的某个“小立方”GRID(5,6,4)=1,即X方向上的第5个栅格、Y方向上的第6栅格、Z方向上的第4栅格,如果此块向X正方向移动一单元,那么就有GRID(6,6,4)=1

拆解锁时,每移动一步,锁上各块的相互位置就发生变化。需用一个“状态”来表述这种不同的布局。在计算机程序里,状态用每个块在每个方向上跟起始状态对比已经移动的数量来表示。如果把1#块确定为固定位置,那么每个状态就是通过另外剩下的5个块相对于1#块的偏移量来描述,通常就是15个整数。程序需维持一个“状态”列表,以追踪运行情况。

建立了以上相关数据结构后,整个拆解程序就可以化简为:分析在单个方向上的移动,以及判断这个移动是否使锁从一个状态到达另一个状态。程序还得区分一个或多个块通过某个移动后从一个“静止块组”中被分离出来,这种分离定义为“部分解”。关于“分析在单个方向上的移动”,稍后将列出其基本算法。

标签: 解法 八通 鲁班锁
  • 文章版权属于文章作者所有,转载请注明 https://rmnxw.com/lvse/xinli/dq9w2r.html