java——汉诺塔问题

内容:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

 

import java.util.Scanner;

public class hannoi {
    public static void move(char pos1,char pos3){
        System.out.print(pos1+"->"+pos3+" ");
    }
    public static void hannuota(int x,char pos1,char pos2, char pos3){
        if(x==1){
            move(pos1,pos3);
        }
        else{
            hannuota(x-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hannuota(x-1,pos2,pos1,pos3);

        }
    }

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println("请输入想算的汉诺塔数目:");
        int x=in.nextInt();
        char pos1,pos2,pos3;
        System.out.println("请输入pos1的名字:");
        pos1=in.next().charAt(0);
        System.out.println("请输入pos2的名字:");
        pos2=in.next().charAt(0);
        System.out.println("请输入pos3的名字:");
        pos3=in.next().charAt(0);
        hannuota(x,pos1,pos2,pos3);
    }
}

我们把三个柱子从左到右分为起始站,中转站,终点站。(pos1,pos2,pos3)

在其中解决的方法便是利用递归去解决汉诺塔问题。

我们无论有多少个盘子,如果是1个盘子,是不是直接从起始站到达终点站.

2个盘子则要A->B A->C B->C (2^2-1)

3个盘子则要A->C A->B C->B A->C B->A B->C A->C (2^3-1)

那么我们可以利用递归来解决问题,不过计算的过程会随着盘子数量的增长变得极为缓慢。

以上就是汉诺塔问题的解决方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值