漢諾塔問題java實現
阿新 • • 發佈:2018-11-12
問題描述
三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外一個柱子上。移動規則:在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
解題思路
使用遞迴演算法進行處理,實在理不清的話,可以按最簡單的例子(3個盤子)自己模擬一下,設有n個盤子,A、B、C三個柱子,大概有3個步驟:
(1)把A上的n-1個盤通過C移動到B。
(2)把A上的最下面的盤移到C。
(3)因為n-1個盤全在B上了,所以把B當做A重複以上步驟就好了。
程式碼實現
程式碼如下:
package com.example.demo; public classHanoi { private static int a = 0; public static void move(int i,String sta,String mid,String end) { if(i>1) { //第一步,把A上的n-1個盤通過C移動到B move(i-1,sta,end,mid); //第二步,把A上的最下面的盤移到C System.out.println("move: " + i + " from " + sta + " to " + end); a++; //第三步,把B上的盤子通過A移到C move(i-1,mid,sta,end); }else { //如果只有一個盤子了,則跳出遞迴,直接移動即可 System.out.println("move: " + i + " from " + sta + " to " + end); a++; } } public static void main(String[] args) { move(3, "A", "B", "C"); System.out.println(a); } }
執行結果: