1. 程式人生 > >漢諾塔問題java實現

漢諾塔問題java實現

問題描述

  三個柱子,起初有若干個按大小關係順序安放的盤子,需要全部移動到另外一個柱子上。移動規則:在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

解題思路

  使用遞迴演算法進行處理,實在理不清的話,可以按最簡單的例子(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 class
Hanoi { 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); } }

  執行結果: