java汉诺塔问题编程,汉诺塔java编程讲解
00-1010 1.问题描述2。制图分析3。问题解释4。代码实现
00-1010河内塔问题是个经典问题。河内塔,又称河内塔,源于一个古老的印度传说。
梵天创造世界的时候做了三根钻石柱子,柱子上自下而上叠放了64个黄金圆盘。
梵天命令梵天从下面按大小顺序重新排列另一根柱子上的圆盘。
而且规定任何时候都不能在小盘上放大盘,一次只能在三列之间移动一个盘。请教如何操作?
00-1010盘的情况:移动之前
移动后
1板块:A直接移动到c。
两个磁盘的情况:移动之前
移动后
2张碟片:A-B A-C B-C
三个盘的情况:在移动之前
移动后
三个磁盘:交流A-B交流
00-1010当有3个盘子的时候,你会发现一个问题。你必须先把上面的两块板移到B列,然后把下面的板移到C列,最后把板从B列移到C列,四块板也是一样。首先把上面的三块板移到B列,然后把下面的板移到C列,最后把板从B列移到C列,于是我们有了一个想法。不管有几块板,都要先把n-1块板移到B列,再把底板移到C列,最后把B列的板移到C列。
我们先来看看规则:
1板:A-C 1次
2板块:A-B A-C B-C三次
3个板块:A-C A-B C-B A-C B-A B-C A-C 7次
所以你可以看到移动的次数实际上是2 n-1 (n是盘子的数量)
00-1010 public类测试演示{//首先我们要写一个模拟鼠标移动的函数。我们要把整个运动过程打印出来。//这个移动函数的作用是从位置1移动到位置2,可能是A-B,A-C,C-B.以及其他可能:public static void move (char pos 1,char pos 2){//所以这里只需要发送相应的位置:system . out . print(pos 1 - pos 2 );//pos1移动到pos2} /** * * @param n n代表你的盘数* @param pos1盘位置* @param pos2盘中转位置* @param pos3盘结束位置*/public static void hanio(int n,char pos1,char pos2,char pos3){ if(n==1){ move(pos1,pos 3);//如果只有一个板块,就把它从A列移到C列}else{ hanio(n-1,pos1,pos3,pos 2);//这里借助C列将n-1块板从A列移动到B列(pos1,pos 3);//底部剩下的最后一个板块从A列移动到C列hanio(n-1,pos2,pos1,pos 3);//这里是借助A列将n-1个板块从B列移动到C列} } public static void main(string[]args){ Hanio(1, A , B , C );//一开始我们的河内塔要指定我们第一次传递给它的位置system . out . println();hanio(2, A , B , C );system . out . println();hanio(3, A , B , C );system . out . println();}}打印结果:
这就是本文关于Java SE解决汉诺塔问题的示例代码。关于Java Hanoi塔问题的更多信息,请搜索Popular IT之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。