zoukankan      html  css  js  c++  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);
        }
    }

      运行结果:

  • 相关阅读:
    poj 3621(最优比率环)
    bzoj 1497(最大权闭合子图)
    Dinic(模板 再错是不可能的 这辈子都不可能了)
    BZOJ 2038
    zoj 3822(概率dp)
    poj 3683(2-sat+拓扑排序)
    poj 2186(tarjan+缩点)
    hdu 5782(kmp+hash)
    hdu 6035(树形dp)
    Python爬取房屋租售信息
  • 原文地址:https://www.cnblogs.com/hhhshct/p/9790302.html
Copyright © 2011-2022 走看看