zoukankan      html  css  js  c++  java
  • 汉诺塔问题

    将n个圆盘从x柱,经由z柱中转,移到y柱(解出n层汉诺塔)时:

    当n=0时,

      不用做任何动作。

    当n>0时,

      首先,将n-1个圆盘从x柱,经由y柱中转,移到z柱(解出n-1层汉诺塔)。

      然后,将1个圆盘从x柱移到y柱。

      最后,将n-1个圆盘从z柱,经过x柱中转,移到y柱(解出n-1层汉诺塔)。

    从以上步骤可知,为了解出n层汉诺塔,要使用“n-1层汉诺塔”的解法。

    #include <stdio.h>
    #include <stdlib.h>
    
    // x:起点柱,y:目标柱,z:中转柱
    void moveDisks(int n, char x, char y, char z)
    {
        if(n == 0)
        {
            // 什么也不做
        }
        else
        {
            // 将n-1个圆盘,从x柱,经由y柱中转,移到z柱
            moveDisks(n-1, x, z, y);
            printf("Move disk %d : from %c to %c
    ",
                n, x, y); // 从x柱移到y柱
            // 将n-1个圆盘,从z柱,经由x柱中转,移到y柱
            moveDisks(n-1, z, y, x);    
        }
    }
    
    int main(void)
    {
        int n;
        printf("Enter number of disks: ");
        scanf("%d", &n);
        printf("The moves are: 
    ");
        moveDisks(n, 'A', 'B', 'C');
        return 0;    
    }
  • 相关阅读:
    【排序】题解_P1093奖学金
    简单了解连接服务器的要求
    centos7安装(纯文字版)
    JAVA虚拟机
    集合
    IO流
    反射
    多线程
    JAVA基础
    博客园皮肤文档
  • 原文地址:https://www.cnblogs.com/utank/p/3603128.html
Copyright © 2011-2022 走看看