右鍵+清除本來好好的按一個N就可以,現(xiàn)在整的啥?清除個內(nèi)容還要按3個鍵?
880
2025-03-31
Hanoi 塔問題(Java實(shí)現(xiàn))
Hanoi 塔問題是一個很經(jīng)典的遞歸問題
設(shè)a,b,c是3個塔座。開始時,在塔座a上有一疊共n個圓盤,這些圓盤自下而上,由大到小地疊在一起。各圓盤從小到大編號為1,2,…,n,現(xiàn)要求將塔座a上的圓盤移到塔座b上,并仍按同樣順序疊置。在移動圓盤時應(yīng)遵守以下移動規(guī)則:
規(guī)則1:每次只能移動1個圓盤;
規(guī)則2:任何時刻都不允許將較大的圓盤壓在較小的圓盤之上;
規(guī)則3:在滿足移動規(guī)則1和2的前提下,可將圓盤移至a,b,c中任一塔座上。
思路
如果只有 1 個圓盤,a --> c
如果圓盤數(shù)大于1
將 n - 1 個圓盤,從 a 借助 c 移動到 b
將剩下 1 個圓盤從 a 移動到 c
將 n - 1 個圓盤,從 b 借助 a 移動到 c
Java源代碼
import java.util.Scanner; /* * 若塵 */ /** * Hanoi 塔問題 * @author ruochen * @version 1.0 */ public class Hanoi { public static void main(String[] args) { int n; Scanner sc = new Scanner(System.in); System.out.print("Please input num: "); n = sc.nextInt(); System.out.println("Process: "); move(n, 'A', 'B', 'C'); } /** * 圓盤移動 * @param n 圓盤個數(shù) * @param a 需要移動的位置 * @param b 借助的位置 * @param c 移動目的地 */ public static void move(int n, char a, char b, char c) { if (n < 0) { System.out.println("enter n > 0"); } else if (n == 1) { System.out.println(a + "-->" + c); } else { move(n - 1, a, c, b); move(1, a, b, c); move(n-1, b, a, c); } } }
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
Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。