1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
/** * 漢諾塔大學(xué)的時(shí)候就學(xué)過,但是根本沒搞明白,唯一知道的就是要用遞歸的方法來求解。 * 問題描述: * 有三根桿子A,B,C。A桿上有N個(gè)(N>1)穿孔圓盤,盤的尺寸由下到上依次變小。 * 要求按下列規(guī)則將所有圓盤移至C桿: * 1.每次只能移動(dòng)一個(gè)圓盤; * 2.大盤不能疊在小盤上面。 * 提示:可將圓盤臨時(shí)置于B桿,也可將從A桿移出的圓盤重新移回A桿, * 但都必須尊循上述兩條規(guī)則。 * 問:如何移?最少要移動(dòng)多少次? * 解決方法: * 假設(shè)只有2個(gè)盤子,柱子分別是A, B, C柱。那么只需要三步就可以把他們從A柱移到C柱, * 這三步是A->B, A->C, B->C。 * 如果盤子數(shù)n超過2呢,我們就可以把這些盤子看成由最下面的那個(gè)盤子和 上面n-1個(gè)盤子 兩部分, * 這兩部分同樣可以用上面的三步實(shí)現(xiàn)移動(dòng)。 * 也就是說我們可以通過遞歸地調(diào)用上面的步驟實(shí)現(xiàn)將所有n個(gè)盤子從A柱移動(dòng)到C柱。 */ package al; public class Hanoi { public static void main(String[] args) { Hanoi hanoi = new Hanoi(); hanoi.move( 3 , 'A' , 'B' , 'C' ); } /** * @author * @param n 盤子數(shù)目 * @param from 起始柱子 * @param temp 中間柱子 * @param to 目標(biāo)柱子 */ public void move( int n, char from, char temp, char to) { if (n == 1 ) { System.out.println( "Move 1 plate from " + from + " to " + to); } else { move(n- 1 , from, to, temp); move( 1 , from, temp, to); move(n- 1 , temp, from, to); } } } |
Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:漢諾塔問題 Hanoi
2019-12-24 13:03junjie JAVA教程
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:漢諾塔問題 Hanoi,本文直接給出實(shí)現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
延伸 · 閱讀
- 2019-12-24Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:選擇排序 Selection Sort
- 2019-12-23使用java處理字符串公式運(yùn)算的方法
- 2019-12-23Java連接MySql的詳細(xì)介紹
- 2019-12-23Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Con
- 2019-12-23Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中
- 2019-12-23Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:三角數(shù)字
- JAVA教程
java實(shí)現(xiàn)將ftp和http的文件直接傳送到hdfs
前面幾篇文章,我們已經(jīng)做了很好的鋪墊了,幾個(gè)要用到的工具我們都做了出來,本文就是將他們集合起來,說下具體的用法,小伙伴們可以參考下。 ...
- JAVA教程
java數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)之漢諾塔示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)和算法中的漢諾塔示例,需要的朋友可以參考下 ...
- JAVA教程
java獲得平臺(tái)相關(guān)的行分隔符和java路徑分隔符的方法
不同系統(tǒng)平臺(tái)下的行分隔符、路徑分隔符等常常不同,如何在Java程序獲取當(dāng)前平臺(tái)的分隔符,以及其他系統(tǒng)相關(guān)的狀態(tài)呢?下面是示例程序,需要的朋友可...
- JAVA教程
java HashMap通過value反查key的代碼示例
本文講解了java HashMap通過value反查key的方法,直接提供代碼供大家參考使用 ...
- JAVA教程
Java利用剪貼板實(shí)現(xiàn)交換程序間數(shù)據(jù)的方法
這篇文章主要介紹了Java利用剪貼板實(shí)現(xiàn)交換程序間數(shù)據(jù)的方法,需要的朋友可以參考下 ...
- JAVA教程
Java集合Set、List、Map的遍歷方法
這篇文章主要介紹了Java集合Set、List、Map的遍歷方法,是非常實(shí)用的遍歷技巧,需要的朋友可以參考下 ...
- JAVA教程
java計(jì)算任意位水仙花數(shù)示例(回文數(shù))
這篇文章主要介紹了java計(jì)算任意位水仙花數(shù)示例(回文數(shù)),需要的朋友可以參考下 ...
- JAVA教程
Java結(jié)合百度云存儲(chǔ)BCS代碼分享
最近云是一個(gè)很熱門的新概念,仿佛任何東西只要跟云相關(guān)聯(lián),就立馬高大上起來,額,我們也追隨潮流吧,項(xiàng)目中也結(jié)合一下云!! ...