靚麗時尚館

位置:首頁 > 健康生活 > 心理

魯班鎖八通解法

心理1.66W
魯班鎖八通解法

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個整數。程式需維持一個“狀態”列表,以追蹤執行情況。

建立了以上相關資料結構後,整個拆解程式就可以化簡為:分析在單個方向上的移動,以及判斷這個移動是否使鎖從一個狀態到達另一個狀態。程式還得區分一個或多個塊通過某個移動後從一個“靜止塊組”中被分離出來,這種分離定義為“部分解”。關於“分析在單個方向上的移動”,稍後將列出其基本演算法。