摘要:當盤子個數超過你個時,其實就是通過遞歸處理兩個盤子每次只走三步即深度遍歷二叉樹代碼用于存放移動的每一步驟移動盤子的遞歸函數當前處理的盤子代表當前的三根柱子
題目:
三個柱子 A、B、C。在A柱子從上到下 按照從小到大的順序放置64盤子,命令將所有的盤子從A柱子移至C柱子,并且搬運過程中小盤子不能放在大盤子上面,且 在三根柱子之間一次只能移動一個盤子
解題思路:(1) 一個盤子 :
1: A--->C
(2) 兩個盤子:
(3)三個盤子:
(4)四個盤子 :
總結:用n表示盤子總數
(1)當只有一個盤子(n=1)的時候,直接從A到C;
(2)當有兩個盤子(n=2)的時候,將第二根柱子B當做輔助柱,共三步;
第一個盤子(n-1)從A到B,第二個盤子(n)從A到C,第一個盤子(n-1)從B到C。
(3)當盤子個數超過2(你>2)個時,其實就是 通過 遞歸 處理兩個盤子(每次只走三步):(n-1)A—>B, (n)A-->C, (n-1)B-->C ;即:深度遍歷二叉樹
js代碼://allSteps :用于存放移動的每一步驟 let allSteps=[]; /* * 移動盤子的遞歸函數 * @param {number} n 當前處理的盤子 * @param {string} a , b ,c 代表當前的三根柱子 */ function move(n,a,b,c){ if(n===1){ allSteps.push({ n:n, from:a, to:c }) }else{ move(n-1,a,c,b); allSteps.push({ n:n, from:a, to:c }); move(n-1,b,a,c); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108626.html
摘要:一實現一個棧類基于堆棧的特性,可以用數組做線性表進行存儲。出棧出棧同樣是利用數組的方法,在數組尾部推出數據。聚合最后,將所有功能聚合后,如下所示,一個堆棧的數據結構就搞定了。堆棧的經典算法應用,首推就是漢諾塔。 棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。 一、實現一個棧類Stack 基于堆...
摘要:應用分治法是一種很重要的算法。字面上的解釋是分而治之,就是把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。 ...
摘要:做這個漢諾塔游戲的想法,來自于幾個月前做百度第一期的一個題目,題目要求在兩個容器間實現子元素的相互拖拽效果。重構好的代碼我放上了,實現的效果可見其,一起玩玩唄,覺得好玩記得給哈 做這個漢諾塔游戲的想法,來自于幾個月前做百度IFE第一期的一個題目,題目要求在兩個容器間實現子元素的相互拖拽效果。當時我就突發奇想:容器看成柱子,子元素看成盤子,再加一點限制底下盤子移動的判斷和勝負的判斷,不就...
摘要:漢諾塔問題有三根柱子,源桿,暫存桿,目的桿上有層盤子,由小到大向下排列,現需要將桿的盤子移到桿中要求大的盤在下面,小的盤在上面一次只能移動一個盤子個人思路先分析問題,用數學的歸納法當只有一個盤時,直接移動當有兩個盤時,先將小的移到暫存桿,再 漢諾塔問題: 有三根柱子,源桿A,暫存桿temp,目的桿C A上有n層盤子,由小到大向下排列,現需要將A桿的盤子移到C桿中 ...
閱讀 1854·2023-04-25 23:28
閱讀 563·2023-04-25 22:49
閱讀 2241·2021-09-27 13:34
閱讀 5158·2021-09-22 15:09
閱讀 3609·2019-08-30 12:52
閱讀 2740·2019-08-29 15:26
閱讀 659·2019-08-29 11:12
閱讀 2190·2019-08-26 12:24