請同意并接受《隱私政策》《服務(wù)條款》
時(shí)間 : 2024-11-19
??這兩年,隨著大家對于孩子的教育開始重視起來,智力玩具現(xiàn)在是家長的首選,很多家長在沒有足夠的時(shí)間陪孩子的情況下,往往會會買一些玩具給孩子,讓他們自已去玩,當(dāng)然市面上流行的玩具比較多,想要選擇一款比較好的玩具,能夠?qū)﹂_發(fā)小孩的智力玩具肯定會受到家長們的喜歡了,不過,目前市場種類繁多,每款玩具都有各自的特點(diǎn),消費(fèi)者也不知道哪些比較適合自已的小孩,不如試試魯班鎖,當(dāng)然,這種玩具玩法比較復(fù)雜,今天就給大家介紹一下魯班鎖解法。??
魯班鎖解法介紹
一、拆解動作限定:
一般地,魯班鎖通過手工的“裝配”難于“拆解”,相反,在計(jì)算機(jī)分析中,則“拆解”比“裝配”更復(fù)雜些。這是因?yàn)樵谟?jì)算機(jī)程序中,“裝配”是邏輯的,但“拆解”的邏輯過程卻最終需要落實(shí)物理實(shí)現(xiàn)。
對一個(gè)“邏輯裝配”而成的鎖,須由計(jì)算機(jī)程序?qū)ζ鋰L試拆解,如果能夠成功找到一個(gè)完全拆解方案,則該方案就是一個(gè)“解”,如果僅能完成部分拆解,也就是剩下的“塊組”無法再繼續(xù)拆解,那就稱這個(gè)拆解方案為“部分解”。并非所有能“邏輯裝配”的鎖都能順利拆解。
計(jì)算機(jī)程序?qū)Σ鸾鈩幼饔幸欢ㄏ拗疲翰鸾庖粋€(gè)塊時(shí),塊只允許沿三個(gè)互相垂直的方向之一移動,每次移動的距離必須是小立方邊長的整數(shù)倍。也就是說,不允許朝任意方向移動塊,也不允許移動任意距離。但是,移動時(shí),可以是一塊移動,也可以幾個(gè)塊組成一個(gè)整體移動。
二、拆解程序的總體思路:
程序?qū)︽i的拆解過程,就是不斷地對塊沿各個(gè)方向嘗試移動的過程,對每一步移動,程序需判斷:能否移動?移動幾格?是否有塊或塊組分離?是否形成部分解?程序還得記錄跟蹤每一步操作后鎖的狀態(tài),并需窮舉全部拆解步驟,才能獲取該裝配的解的全部情況。
為了使程序能夠進(jìn)行相關(guān)操作,需把一個(gè)裝配鎖置于一個(gè)三維空間中,并對空間中的塊進(jìn)行定位。但這樣做并不夠,因?yàn)閴K的形狀千變?nèi)f化,跟蹤一整個(gè)塊還無法判斷塊之間在移動時(shí)的交互情況,因而需對塊進(jìn)行邏輯分解。一個(gè)長度為6單元的塊,按“小立方”為單位,分解成24個(gè)區(qū)域,包括可切割加工的12個(gè)區(qū)域和二端固定的12個(gè)區(qū)域。程序需追蹤這24個(gè)立方區(qū)域中全體物理存在的“小立方塊”,當(dāng)然“空立方”區(qū)域就不必計(jì)算了,全體物理小立方塊在某個(gè)方向上可以移動的值的最小值,就是塊在此方向上的可移動距離。下圖畫出一個(gè)塊在三維空間中的情形:
繪制了一個(gè)以20單位邊長的立方空間,以圖中塊的左下角處的“小立方”為例,其空間坐標(biāo)為(X,Y,Z)=(6,6,10)。
當(dāng)一個(gè)裝配鎖定位到該柵格空間中后,所有小立方將被一一定位,獲得唯一的空間坐標(biāo)。對應(yīng)于計(jì)算機(jī)程序,則設(shè)計(jì)一個(gè)三維數(shù)組GRID(x,y,z),數(shù)組元素的值表示該柵格由哪個(gè)塊占據(jù),顯見,其取值范圍為1-6;對于純空間(包括整個(gè)鎖未占據(jù)的空間和“有孔鎖”內(nèi)部的孔洞),其數(shù)組元素的值為0。
按上述柵格空間的構(gòu)造,一個(gè)塊如果在柵格中移動,就相當(dāng)于數(shù)組中對應(yīng)元素值的改變。比如1#塊的某個(gè)“小立方”GRID(5,6,4)=1,即X方向上的第5個(gè)柵格、Y方向上的第6柵格、Z方向上的第4柵格,如果此塊向X正方向移動一單元,那么就有GRID(6,6,4)=1;
拆解鎖時(shí),每移動一步,鎖上各塊的相互位置就發(fā)生變化。需用一個(gè)“狀態(tài)”來表述這種不同的布局。在計(jì)算機(jī)程序里,狀態(tài)用每個(gè)塊在每個(gè)方向上跟起始狀態(tài)對比已經(jīng)移動的數(shù)量來表示。如果把1#塊確定為固定位置,那么每個(gè)狀態(tài)就是通過另外剩下的5個(gè)塊相對于1#塊的偏移量來描述,通常就是15個(gè)整數(shù)。程序需維持一個(gè)“狀態(tài)”列表,以追蹤運(yùn)行情況。
建立了以上相關(guān)數(shù)據(jù)結(jié)構(gòu)后,整個(gè)拆解程序就可以化簡為:分析在單個(gè)方向上的移動,以及判斷這個(gè)移動是否使鎖從一個(gè)狀態(tài)到達(dá)另一個(gè)狀態(tài)。程序還得區(qū)分一個(gè)或多個(gè)塊通過某個(gè)移動后從一個(gè)“靜止塊組”中被分離出來,這種分離定義為“部分解”。關(guān)于“分析在單個(gè)方向上的移動”,稍后將列出其基本算法。
綜合起來說,程序完全地拆解整個(gè)鎖的過程,就是在不同的方向上、在新的狀態(tài)下重復(fù)執(zhí)行拆解邏輯的過程;每次一塊“塊組”被成功拆解,就記錄其為一個(gè)“子裝配”,用于后續(xù)分析。
我們發(fā)現(xiàn)這類鎖的解法非??简?yàn)人的耐性,邏輯分析能力和動手能力,即使是一般的家長,如果不懂其中的竅門和技巧,也未必會能解得開這類游戲,相對于其他各種各樣的玩具來說,這種游戲更具有歷史特色,更是凝結(jié)了我們祖先寶貴的經(jīng)驗(yàn)和智慧,對于孩子的興趣愛好培養(yǎng),動手能力的提升,都是有著相當(dāng)大的作用,是各位家長們的不錯(cuò)選擇。
上述內(nèi)容來自用戶自行上傳或互聯(lián)網(wǎng),如有版權(quán)問題,請聯(lián)系zxcq@corp.to8to.com 。
發(fā)表評論