Java解決漢諾塔問題

問題描述:假設有三個分別命名爲A,B,C的塔座,在塔座A上插有n個直徑大小各不相同,依小到大編號爲1,2,…,n的圓盤。現要求將塔座A上的n個圓盤移至塔座C上,並按同樣順序疊排,圓盤移動時必須遵循以下規則:
(1)每次只能移動一個圓盤;
(2)圓盤可以插在A,B,C中的任一塔座;
(3)任何時刻都不能將一個較大的圓盤壓在較小的圓盤之上;
問題分析:
這個問題可以採用分治求解的遞歸方法來解決這個問題。設最初在塔座A上的圓盤數爲n,則當n=1時,只需直接將這個圓盤移到塔座C上就可以了;否則執行以下操作:
(1)用C做過度,將A柱上的(n-1)個盤子移到B上;
(2)將A柱上最後一個盤子直接移到C柱子上;
(3)用A做過度,將B上的(n-1)個盤子移到C柱子上;
解決代碼如下:

package ACM;
import java.util.Scanner;
class myHanoi{
	public void move (int i,char a,char b)
	{
		System.out.println(i+" "+a+" "+b);
	}
	public void hanoi(int n,char a,char b,char c)
	{
		if(n==1)
			move (1,a,c);
		else
		{
		    hanoi(n-1,a,c,b);
			move(n,a,c);
	        hanoi(n-1,b,a,c);
		}
	}
}
public class Hanoi {
	public static void main(String[] args)
	{
		Scanner in=new Scanner(System.in);
		char A='A',B='B',C='C';
		int n;
		while(in.hasNext())
		{
			n=in.nextInt();
			myHanoi han=new myHanoi();
			han.hanoi(n, A, B, C);
		}
		in.close();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章