汉诺塔问题

素颜马尾好姑娘i 2022-09-30 00:32 268阅读 0赞
  1. import java.util.Scanner;
  2. /** * 汉诺塔问题 * 不考虑中转,只考虑起始柱子到目标柱子的移动 * 记住始终一点:中间一个不管是啥柱子,都是中转,盘子移动只发生在起始到目标柱子 * @author Administrator * */
  3. public class HanoiTest {
  4. private static long count=0;
  5. @SuppressWarnings("resource")
  6. public static void main(String[] args) {
  7. Scanner scanner=new Scanner(System.in);
  8. int num=scanner.nextInt();
  9. hanoi(num, "A柱子", "B柱子", "C柱子");
  10. System.out.println(num+"个盘子,需要"+count+"次移动");
  11. }
  12. /** * * @param num 汉诺塔个数 * @param start 起始的柱子 * @param transfer 中转柱子 * @param target 目标柱子 */
  13. static void hanoi(int num,String start,String transfer,String target){
  14. if(num==1){
  15. ++count;
  16. //直接将盘从起始移到目标柱子
  17. System.out.println("第"+count+"次移动,\t从"+start+"移到"+target);
  18. }else {
  19. //将上面n-1个盘先移到中转的柱子上,相当于中转的就是目标柱子
  20. hanoi(num-1, start, target, transfer);
  21. //将起始柱子上的一个盘移到目标柱子
  22. hanoi(1, start, transfer,target);
  23. //将中转柱子上的n-1个盘移到目标柱子上
  24. hanoi(num-1, transfer,start, target);
  25. }
  26. }
  27. }

额,,不深究,,,,

发表评论

表情:
评论列表 (有 0 条评论,268人围观)

还没有评论,来说两句吧...

相关阅读

    相关 问题

    1.汉诺塔问题:如果将n个盘子(由小到大)从a通过b,搬到c,搬运过程中不能出现小盘子在大盘子下面的情况。 分析:这个一个递归问题。只要将n-1个盘子从a通过c(没有中间点肯

    相关 问题

    汉诺塔 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵

    相关 问题

    问题描述: 相传在[古印度][Link 1]圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺

    相关 问题

    汉诺塔问题是经典的递归问题,它的递归类型是:求解问题的方法是递归的。 解题思路: 1. 首先将n-1个盘子从X借助Z移动到Y。 2. 将第n个盘子从X移动到Z。 3.

    相关 问题

    汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新