星空网 > 软件开发 > Java

Hanoi问题java解法

  用什么语言解法都差不多,思路都是一样,递归,这其中只要注重于开始和结果的状态就可以了,对于中间过程,并不需要深究。(我细细思考了一下,还是算了。=_=)

  代码其实很简单注重的是思路。

  问题描述:有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上。把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。

  简要概括一下,每次只能移动一个盘子,小盘子不能被大盘子压着,源座是A、目标座是C,过渡座是B。

  嗯,问题很明确,下面开始分析。

  我思考的过程是,先考虑一下最简单的情况,即只有一个盘子(n=1),一个盘子很好解决,A——>C即可;当盘子数(n)为不确定的个数的时候,这时候,我们写一个方法,将(n-1)个盘子按规则移动到B盘,那么A盘上剩下的必然是最大的盘子,A——>C直接移动到C盘即可;那么现在B盘上有(n-1)个盘子,为了让这n-1个盘子中的最大的那个盘子移动到C盘,我们写一个方法将(n-2)个盘子按规则移动到A盘,而B座上剩下(n-1)中最大的盘子,将这个盘子移动到C盘;此时A上面有(n-2)个盘子,我们写一个方法将(n-3)个盘子移动到C盘...

  那么现在解法很明了了,后面不过是重复上诉步骤而已了,函数体没变,只是目标座和过渡座变化了而已。

  没有必要去深究这中间的过程,如果从一开始去深究,n个盘子,每一个盘子的轨迹的话,那么只能是越陷越深,有时候也是要换一个角度去考虑问题。

  废话不说了,直接上代码:

public class hanoi {	public static void main(String[] args){		hanoi h = new hanoi();		h.move(3, 'A', 'B', 'C');	}		public void move(int n,char a,char b,char c){		if(n == 1){			System.out.println("Disk "+n+" From "+a+" To "+c);		}else{			move(n - 1,a,c,b);			System.out.println("Disk "+(n-1)+" From "+a+" To "+c);			move(n - 1,b,a,c);		}	}}

   嗯,以上。




原标题:Hanoi问题java解法

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流