時間 : 2024-11-19
??這兩年,隨著大家對于孩子的教育開始重視起來,智力玩具現在是家長的首選,很多家長在沒有足夠的時間陪孩子的情況下,往往會會買一些玩具給孩子,讓他們自已去玩,當然市面上流行的玩具比較多,想要選擇一款比較好的玩具,能夠對開發小孩的智力玩具肯定會受到家長們的喜歡了,不過,目前市場種類繁多,每款玩具都有各自的特點,消費者也不知道哪些比較適合自已的小孩,不如試試魯班鎖,當然,這種玩具玩法比較復雜,今天就給大家介紹一下魯班鎖解法。??
魯班鎖解法介紹
一、拆解動作限定:
一般地,魯班鎖通過手工的“裝配”難于“拆解”,相反,在計算機分析中,則“拆解”比“裝配”更復雜些。這是因為在計算機程序中,“裝配”是邏輯的,但“拆解”的邏輯過程卻最終需要落實物理實現。
對一個“邏輯裝配”而成的鎖,須由計算機程序對其嘗試拆解,如果能夠成功找到一個完全拆解方案,則該方案就是一個“解”,如果僅能完成部分拆解,也就是剩下的“塊組”無法再繼續拆解,那就稱這個拆解方案為“部分解”。并非所有能“邏輯裝配”的鎖都能順利拆解。
計算機程序對拆解動作有一定限制:拆解一個塊時,塊只允許沿三個互相垂直的方向之一移動,每次移動的距離必須是小立方邊長的整數倍。也就是說,不允許朝任意方向移動塊,也不允許移動任意距離。但是,移動時,可以是一塊移動,也可以幾個塊組成一個整體移動。
二、拆解程序的總體思路:
程序對鎖的拆解過程,就是不斷地對塊沿各個方向嘗試移動的過程,對每一步移動,程序需判斷:能否移動?移動幾格?是否有塊或塊組分離?是否形成部分解?程序還得記錄跟蹤每一步操作后鎖的狀態,并需窮舉全部拆解步驟,才能獲取該裝配的解的全部情況。
為了使程序能夠進行相關操作,需把一個裝配鎖置于一個三維空間中,并對空間中的塊進行定位。但這樣做并不夠,因為塊的形狀千變萬化,跟蹤一整個塊還無法判斷塊之間在移動時的交互情況,因而需對塊進行邏輯分解。一個長度為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個整數。程序需維持一個“狀態”列表,以追蹤運行情況。
建立了以上相關數據結構后,整個拆解程序就可以化簡為:分析在單個方向上的移動,以及判斷這個移動是否使鎖從一個狀態到達另一個狀態。程序還得區分一個或多個塊通過某個移動后從一個“靜止塊組”中被分離出來,這種分離定義為“部分解”。關于“分析在單個方向上的移動”,稍后將列出其基本算法。
綜合起來說,程序完全地拆解整個鎖的過程,就是在不同的方向上、在新的狀態下重復執行拆解邏輯的過程;每次一塊“塊組”被成功拆解,就記錄其為一個“子裝配”,用于后續分析。
我們發現這類鎖的解法非常考驗人的耐性,邏輯分析能力和動手能力,即使是一般的家長,如果不懂其中的竅門和技巧,也未必會能解得開這類游戲,相對于其他各種各樣的玩具來說,這種游戲更具有歷史特色,更是凝結了我們祖先寶貴的經驗和智慧,對于孩子的興趣愛好培養,動手能力的提升,都是有著相當大的作用,是各位家長們的不錯選擇。
上述內容來自用戶自行上傳或互聯網,如有版權問題,請聯系zxcq@corp.to8to.com 。
發表評論